home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 23 / CU Amiga - Super CD-ROM 23 (June 1998).iso / CreatingGames / Utilities / Asm / AB3DIIsrc / source_4000 / HIRES.s < prev    next >
Encoding:
Text File  |  1996-07-29  |  221.3 KB  |  15,062 lines

  1.  
  2. CHEESEY equ 0
  3.  
  4. *************************************************
  5. * Stuff to do to get a C2P version:
  6. * Change copperlist
  7. * Change wall drawing
  8. * change floor drawing
  9. * change object drawing
  10. * change polygon drawing (ugh)
  11. * Write a palette generator program in AMOS
  12. * to provide a good 256 colour palette and
  13. * convert all graphics files specified
  14. * (possibly included in the game linker
  15. * program).
  16. * Possibly change the wall/floor/object
  17. * palettes to look nicer with more shades.
  18. * RE-implement stippling (if not present)
  19. * as it will look gorgeous now.
  20. *************************************************
  21.  
  22. ;MIDDLEX set 96
  23. ;RIGHTX set 191
  24. ;BOTTOMY set 160 
  25.  
  26. ;MIDDLEX set 96
  27. ;RIGHTX set 191
  28. ;BOTTOMY set 160
  29.  
  30. _break    macro
  31. ;    bkpt    \1
  32.     endm
  33.  
  34.  
  35. FILTER    macro
  36. ;    move.l    d0,-(sp)
  37. ;    move.l    #65000,d0
  38. ;.loop\@
  39. ;    bchg    #1,$bfe001
  40. ;    dbra    d0,.loop\@
  41. ;    move.l    (sp)+,d0
  42.     endm
  43.  
  44. BLACK    macro
  45.     move.w    #0,$dff180
  46.     endm
  47.  
  48. RED    macro
  49.     move.w    #$f00,$dff180
  50.     endm
  51.  
  52. FLASHER macro
  53. ;    movem.l    d1,-(sp)
  54. ;    move.w    #-1,d1
  55. ;
  56. ;loop3\@
  57. ;;    move.w    #\1,$dff180
  58. ;    nop
  59. ;    nop
  60. ;    move.w    #\2,$dff180
  61. ;    nop
  62. ;    nop
  63. ;    dbra    d1,loop3\@
  64.  
  65. ;    movem.l    (sp)+,d1
  66.  
  67.     endm
  68.  
  69. GREEN    macro
  70.     move.w    #$0f0,$dff180
  71.     endm
  72.  
  73. BLUE    macro
  74.     move.w    #$f,$dff180
  75.     endm
  76.  
  77. DataCacheOff macro
  78.     movem.l    a0-a6/d0-d7,-(sp)
  79.     move.l    4.w,a6
  80.     moveq    #0,d0
  81.     move.l    #%0000000100000000,d1
  82.     jsr    _LVOCacheControl(a6)
  83.     movem.l    (sp)+,a0-a6/d0-d7
  84.     endm
  85.  
  86. DataCacheOn macro
  87.     movem.l    a0-a6/d0-d7,-(sp)
  88.     move.l    4.w,a6
  89.     moveq    #-1,d0
  90.     move.l    #%0000000100000000,d1
  91.     jsr    _LVOCacheControl(a6)
  92.     movem.l    (sp)+,a0-a6/d0-d7
  93.     endm
  94.  
  95.     opt    P=68020
  96.  
  97.     include utils:sysinc/hardware/intbits.i
  98.  
  99. CD32VER equ 0
  100.  
  101. maxscrdiv EQU 8
  102. max3ddiv EQU 5
  103. playerheight EQU 12*1024
  104. playercrouched EQU 8*1024
  105. scrheight EQU 80
  106.  
  107. ; k/j/m
  108.  
  109. ; 4/8
  110. ; s/x
  111. ; b/n
  112.  
  113. midoffset EQU 104*4*40
  114.  
  115.  
  116.  SECTION Scrn,CODE
  117. OpenLib       equ -552
  118. CloseLib      equ -414
  119.  
  120. INTREQ        equ    $09C
  121. INTENA        equ    $09A
  122. INTENAR    equ    $01C
  123. DMACON        equ    $096
  124.  
  125. SERPER        equ    $032
  126. SERDATR    equ    $018
  127. SERDAT        equ    $030
  128. vhposr        equ $006    
  129. vhposrl    equ $007 
  130.  
  131. bltcon0    equ $40 
  132. bltcon1    equ $42
  133. bltcpt        equ $48
  134. bltbpt        equ $4c
  135. bltapt        equ $50
  136. spr0ctl    equ $142
  137. spr1ctl    equ $14a
  138. spr2ctl    equ $152
  139. spr3ctl    equ $15a
  140. spr4ctl    equ $162
  141. spr5ctl    equ $16a
  142. spr6ctl    equ $172
  143. spr7ctl    equ $17a
  144. spr0pos    equ $140
  145. spr1pos    equ $148
  146. spr2pos    equ $150
  147. spr3pos    equ $158
  148. spr4pos    equ $160
  149. spr5pos    equ $168
  150. spr6pos    equ $170
  151. spr7pos    equ $178
  152. bltdpt         equ $54
  153. bltafwm    equ $44
  154. bltalwm    equ $46
  155. bltsize         equ $58
  156. bltcmod         equ $60
  157. bltbmod         equ $62
  158. bltamod         equ $64
  159. bltdmod         equ $66
  160. diwstart        equ $8e         ; Screen hardware registers.
  161. diwstop         equ $90
  162. ddfstart        equ $92
  163. ddfstop         equ $94
  164. bplcon0         equ $100
  165. bplcon1         equ $102
  166. col0            equ $180
  167. col1            equ $182
  168. col2        equ $184
  169. col3        equ $186
  170. col4        equ $188
  171. col5        equ $18a
  172. col6        equ $18c
  173. col7        equ $18e
  174. col8            equ $190
  175. col9            equ $192
  176. col10           equ $194
  177. col11           equ $196
  178. col12           equ $198
  179. col13           equ $19a
  180. dmacon        equ $96
  181. dmaconr        equ $002
  182. intenar        equ $01c
  183. intena        equ $09a
  184. intreq        equ $09c
  185. intreqr        equ $01e
  186. intreqrl    equ $01f
  187. bpl1pth         equ $e0
  188. bpl1ptl         equ $e2
  189. bpl2pth        equ $e4
  190. bpl2ptl        equ $e6
  191. bpl3pth        equ $e8
  192. bpl3ptl        equ $ea
  193. bpl4pth        equ $ec
  194. bpl4ptl        equ $ee
  195. bpl5pth        equ $f0
  196. bpl5ptl        equ $f2
  197. bpl6pth        equ $f4
  198. bpl6ptl        equ $f6
  199. bpl7pth        equ $f8
  200. bpl7ptl        equ $fa
  201. bpl8pth        equ $fc
  202. bpl8ptl        equ $fe
  203. spr0pth        equ $120
  204. spr0ptl        equ $122
  205. spr1pth        equ $124
  206. spr1ptl        equ $126
  207. spr2pth        equ $128
  208. spr2ptl        equ $12a
  209. spr3pth        equ $12c
  210. spr3ptl        equ $12e
  211. spr4pth        equ $130
  212. spr4ptl        equ $132
  213. spr5pth        equ $134
  214. spr5ptl        equ $136
  215. spr6pth        equ $138
  216. spr6ptl        equ $13a
  217. spr7pth        equ $13c
  218. spr7ptl        equ $13e
  219. adkcon        equ   $09E
  220.  
  221.  
  222. ; move.l #length,d0
  223. ; moveq.l #2,d1    ; chipmem
  224. ; move.l 4.w,a6
  225. ; jsr allocmem(a6) = -198
  226.  
  227. ; tst.l d0
  228. ; beq.s ohbugger
  229. ; move.l d0,memaddr
  230.  
  231.  
  232. ; move.l 4.w,a6
  233. ; move.l memaddr,a1
  234. ; move.l #size,d0
  235. ; jsr freemem(a6) =-210
  236.  
  237.  
  238. ** This waits for the blitter to finish before allowing program
  239. ** execution to continue.
  240.  
  241.  
  242.  include "ab3:source_4000/protsetupdecode"
  243.  
  244. SAVEREGS MACRO
  245.  movem.l d0-d7/a0-a6,-(a7)
  246.  ENDM
  247.  
  248. GETREGS MACRO
  249.  movem.l (a7)+,d0-d7/a0-a6
  250.  ENDM
  251.  
  252.  
  253. WB MACRO
  254. \@bf:
  255.  btst #6,dmaconr(a6)
  256.  bne.s \@bf
  257.  ENDM
  258.  
  259. WBa MACRO
  260. \@bf:
  261.  move.w #\2,$dff180
  262.  
  263.  btst #6,$bfe001
  264.  bne.s \@bf
  265. \@bz:
  266.  
  267.  move.w #$f0f,$dff180
  268.  
  269.  btst #6,$bfe001
  270.  beq.s \@bz
  271.  
  272.  ENDM
  273.  
  274. *Another version for when a6 <> dff000
  275.  
  276. WBSLOW MACRO
  277. \@bf:
  278.  btst #6,$dff000+dmaconr
  279.  bne.s \@bf
  280.  ENDM
  281.  
  282. WT MACRO
  283. \@bf:
  284.  btst #6,(a3)
  285.  bne.s \@bd
  286.  rts
  287. \@bd: 
  288.  btst #4,(a0)
  289.  beq.s \@bf
  290.  ENDM
  291.  
  292. WTNOT MACRO
  293. \@bf:
  294.  btst #6,(a3)
  295.  bne.s \@bd
  296.  rts
  297. \@bd: 
  298.  btst #4,(a0)
  299.  bne.s \@bf
  300.  ENDM
  301.  
  302. **
  303.  
  304.  include "ab3:source_4000/ProtectionProtection"
  305.  include "macros.i"
  306.  include "ab3:source_4000/defs.i"
  307.  
  308. ;wtclickk:
  309. ; btst #6,$bfe001
  310. ; bne.s wtclickk
  311.  
  312.  move.w (a0)+,LEVTOPLAY
  313.  
  314.  
  315.  jsr MakePatch
  316.  
  317. ;    FLASHER $0f0,$fff
  318.  
  319. ; PROTFCALC
  320. ; PROTGCALC
  321. ; PROTHCALC
  322. ; PROTICALC
  323. ; PROTKCALC
  324. ; PROTLCALC
  325. ; PROTMCALC
  326.  
  327.  
  328.  
  329.  move.l #$dff000,a6    ; NB V. IMPORTANT: A6=CUSTOM BASE
  330.  move.w intenar(a6),_storeint
  331.  and.w #$c000,_storeint
  332.  
  333.  move.w #31,SERPER(a6)    ;19200 baud, 8 bits, no parity
  334.  
  335.  
  336.  st GOURSEL
  337.  
  338.  
  339.  move.l 4.w,a6
  340.  lea VBLANKInt(pc),a1
  341.  moveq #INTB_COPER,d0
  342.  jsr _LVOAddIntServer(a6)
  343.  
  344.     IFEQ CD32VER
  345.  move.l 4.w,a6
  346.  lea KEYInt(pc),a1
  347.  moveq #INTB_PORTS,d0
  348.  jsr _LVOAddIntServer(a6)
  349.     ENDC
  350.  
  351.  WBSLOW
  352.  
  353.  
  354.  IFNE CD32VER
  355.  clr.b PLR1KEYS
  356.  clr.b PLR1PATH
  357.  clr.b PLR1MOUSE
  358.  st PLR1JOY
  359.  clr.b PLR2KEYS
  360.  clr.b PLR2PATH
  361.  clr.b PLR2MOUSE
  362.  st PLR2JOY
  363.  ELSE
  364.  st PLR1KEYS
  365.  clr.b PLR1PATH
  366.  clr.b PLR1MOUSE
  367.  clr.b PLR1JOY
  368.  st PLR2KEYS
  369.  clr.b PLR2PATH
  370.  clr.b PLR2MOUSE
  371.  clr.b PLR2JOY
  372.  ENDC
  373.  
  374.  PRSDO
  375.  
  376.  move.l #2,d1    
  377.  move.l #10280*2,d0
  378.  move.l 4.w,a6
  379.  jsr -198(a6)
  380.  move.l d0,TEXTSCRN
  381.  move.w d0,TSPTl
  382.  swap d0
  383.  move.w d0,TSPTh
  384.  swap d0
  385.  add.w #80,d0
  386.  move.w d0,TSPTl2
  387.  swap d0
  388.  move.w d0,TSPTh2
  389.  
  390.  move.l #nullspr,d0
  391.  move.w d0,txs0l
  392.  move.w d0,txs1l
  393.  move.w d0,txs2l
  394.  move.w d0,txs3l
  395.  move.w d0,txs4l
  396.  move.w d0,txs5l
  397.  move.w d0,txs6l
  398.  move.w d0,txs7l
  399.  swap d0
  400.  move.w d0,txs0h
  401.  move.w d0,txs1h
  402.  move.w d0,txs2h
  403.  move.w d0,txs3h
  404.  move.w d0,txs4h
  405.  move.w d0,txs5h
  406.  move.w d0,txs6h
  407.  move.w d0,txs7h 
  408.  
  409.  move.l #0,d1    
  410.  move.l #140000,d0
  411.  move.l 4.w,a6
  412.  jsr -198(a6)
  413.  move.l d0,LEVELDATA
  414.  
  415.  move.l #0,d1
  416.  
  417.  ifeq CHEESEY    
  418.  move.l #320*256,d0
  419.  endc
  420.  
  421.  ifne CHEESEY
  422.  move.l #320*160,d0
  423.  endc
  424.  
  425.  move.l 4.w,a6
  426.  jsr -198(a6)
  427.  move.l d0,FASTBUFFER
  428.  
  429.  
  430.  move.l #consttab,a0
  431.  moveq #1,d0
  432.  move.w #8191,d1
  433. fillconst:
  434.  
  435.  move.l #16384*64,d2
  436.  divs.l d0,d2
  437. ; ext.l d2    ;c#
  438.  move.l #64*64*65536,d3
  439.  divs.l d2,d3
  440. ; move.l d3,d4
  441. ; asr.l #6,d4
  442.  move.l d3,(a0)+    ;e#
  443.   
  444.  asr.l #1,d2    ; c#/2.0
  445.  sub.l #40*64,d2    ; d#
  446.  muls.l d3,d2    ; d#*e#
  447.  
  448.  asr.l #6,d2
  449.  move.l d2,(a0)+
  450.  
  451.  addq #1,d0
  452.  
  453.  dbra d1,fillconst
  454.  
  455.  jsr START
  456.  
  457.  rts
  458.  
  459. FASTBUFFER: dc.l 0
  460.  
  461. SYSTEMBLITINT: dc.l 0
  462.  
  463. _storeint
  464.     dc.w 0
  465.  
  466. * Load level into buffers.
  467.  clr.b doanything
  468.  clr.b dosounds
  469.  
  470. ; DRAW TEXT SCREEN
  471.  
  472. TWEENTEXT:
  473.  
  474.  move.l LEVELTEXT,a0
  475.  move.w PLOPT,d0
  476.  muls #82*16,d0
  477.  add.l d0,a0
  478.  
  479.  move.w #15,d7
  480.  move.w #0,d0
  481. DOWNTEXT:
  482.  move.l TEXTSCRN,a1
  483.  jsr DRAWLINEOFTEXT
  484.  addq #1,d0
  485.  add.w #82,a0
  486.  dbra d7,DOWNTEXT
  487.  rts
  488.  
  489. FONTADDRS:
  490.  dc.l ENDFONT0,CHARWIDTHS0
  491.  dc.l ENDFONT1,CHARWIDTHS1
  492.  dc.l ENDFONT2,CHARWIDTHS2
  493.  
  494. ENDFONT0:
  495.  incbin "endfont0"
  496. CHARWIDTHS0:
  497.  incbin "charwidths0"
  498. ENDFONT1:
  499. ; incbin "endfont1"
  500. CHARWIDTHS1:
  501. ; incbin "charwidths1"
  502. ENDFONT2:
  503. ; incbin "endfont2"
  504. CHARWIDTHS2:
  505. ; incbin "charwidths2"
  506.  
  507.  even
  508.  
  509. DRAWLINEOFTEXT:
  510.  movem.l d0/a0/d7,-(a7)
  511.  
  512.  muls #80*16,d0
  513.  add.l d0,a1    ; screen pointer
  514.  
  515.  move.l #FONTADDRS,a3
  516.  moveq #0,d0
  517.  move.b (a0)+,d0
  518.  move.l (a3,d0.w*8),a2
  519.  move.l 4(a3,d0.w*8),a3
  520.  
  521.  moveq #0,d4
  522.  
  523.  moveq #0,d1    ; width counter:
  524.  move.w #79,d6
  525.  tst.b (a0)+
  526.  beq.s NOTCENTRED
  527.  moveq #-1,d5
  528.  move.l a0,a4
  529.  moveq #0,d2
  530.  moveq #0,d3
  531.  move.w #79,d0    ; number of chars
  532. .addup:
  533.  addq #1,d5
  534.  move.b (a4)+,d2
  535.  move.b -32(a3,d2.w),d4
  536.  add.w d4,d3
  537.  cmp.b #32,d2
  538.  beq.s .DONTPUTIN
  539.  move.w d5,d6
  540.  move.w d3,d1
  541. .DONTPUTIN:
  542.  dbra d0,.addup
  543.  asr.w #1,d1
  544.  neg.w d1
  545.  add.w #320,d1    ; horiz pos of start x
  546.  
  547. NOTCENTRED:
  548.  move.w d6,d7
  549. DOACHAR:
  550.  moveq #0,d2
  551.  move.b (a0)+,d2
  552.  sub.w #32,d2
  553.  moveq #0,d6
  554.  move.b (a3,d2.w),d6
  555.  asl.w #5,d2
  556.  lea (a2,d2.w),a4    ; char font
  557. val SET 0
  558.  REPT 16
  559.  move.w (a4)+,d0
  560.  bfins d0,val(a1){d1:d6}
  561. val SET val+80
  562.  ENDR
  563.  add.w d6,d1
  564.  dbra d7,DOACHAR
  565.  movem.l (a7)+,d0/a0/d7
  566.  rts 
  567.  
  568.  
  569. CLRTWEENSCRN:
  570.  move.l TEXTSCRN,a0
  571.  move.w #(10240/16)-1,d0
  572.  move.l #$0,d1
  573. .lll
  574.  move.l d1,(a0)+
  575.  move.l d1,(a0)+
  576.  move.l d1,(a0)+
  577.  move.l d1,(a0)+
  578.  move.l d1,(a0)+
  579.  move.l d1,(a0)+
  580.  move.l d1,(a0)+
  581.  move.l d1,(a0)+
  582.  dbra d0,.lll
  583.  rts
  584.  
  585. LEVTOPLAY: dc.w 0
  586.  
  587. COPYLINK: dc.l 0
  588.  
  589. PLAYTHEGAME:
  590.  
  591.  move.w #0,TXTCOLL
  592.  move.w #0,MIXCOLL
  593.  move.w #0,TOPCOLL
  594.  
  595.  bsr CLRTWEENSCRN
  596.  
  597.  cmp.b #'n',mors
  598.  bne.s .notext
  599.  bsr TWEENTEXT
  600. .notext
  601.  
  602. ;charlie 
  603.  move.l #TEXTCOP,$dff080
  604.  
  605.  move.w #$10,d0
  606.  move.w #7,d1
  607.  
  608. .fdup
  609.  move.w d0,TXTCOLL
  610.  move.w d0,MIXCOLL
  611.  add.w #$121,d0
  612. .wtframe:
  613.  btst #5,$dff000+intreqrl
  614.  beq.s .wtframe
  615.  move.w #$0020,$dff000+intreq
  616.  dbra d1,.fdup
  617.  
  618.  jsr INITCOPPERSCRN
  619.  
  620.  move.l #$dff000,a6
  621.  jsr SETPLAYERS
  622.  
  623.  move.l #0,TYPEOFMEM
  624.  move.l #LLname,a0
  625.  jsr LOADAFILE
  626.  move.l d0,LINKS
  627.  
  628.  move.l #0,TYPEOFMEM
  629.  move.l #LLFname,a0
  630.  jsr LOADAFILE
  631.  move.l d0,FLYLINKS
  632.  
  633. ; Get level memory.
  634.  
  635.  move.l #1,d1
  636.  move.l #40000,d0
  637.  move.l 4.w,a6
  638.  jsr -198(a6)
  639.  move.l d0,LEVELGRAPHICS
  640.  
  641.  move.l #1,d1
  642.  move.l #40000,d0
  643.  move.l 4.w,a6
  644.  jsr -198(a6)
  645.  move.l d0,LEVELCLIPS
  646.  
  647.  move.l #2,d1
  648.  move.l #70000,d0
  649.  move.l 4.w,a6
  650.  jsr -198(a6)
  651.  move.l d0,LEVELMUSIC
  652.  
  653.  move.l #$dff000,a6
  654.  
  655. ; move.b LEVTOPLAY,d0
  656. ; move.b d0,LEVA
  657. ; move.b d0,LEVB
  658. ; move.b d0,LEVC
  659. ; move.b d0,LEVD
  660. ; move.b d0,LEVE
  661.  
  662.  
  663. ; move.l #LEVELDATAD,LEVELDATA
  664. ; move.l #LEVELGRAPHICSD,LEVELGRAPHICS
  665. ; move.l #LEVELCLIPSD,LEVELCLIPS
  666.  
  667. ; bra noload
  668.  
  669. *********************************
  670.  
  671. ; move.l doslib,a6
  672. ; move.l #LLname,d1
  673. ; move.l #1005,d2
  674. ; jsr -30(a6)
  675. ; move.l d0,LLhandle
  676. ;
  677. ; move.l doslib,a6
  678. ; move.l d0,d1
  679. ; move.l #LINKS,d2
  680. ; move.l #10000,d3
  681. ; jsr -42(a6)
  682. ;
  683. ; move.l doslib,a6
  684. ; move.l LLhandle,d1
  685. ; jsr -36(a6)
  686.  
  687.  ********************************
  688.  
  689. ; move.l doslib,a6
  690. ; move.l #LLFname,d1
  691. ; move.l #1005,d2
  692. ; jsr -30(a6)
  693. ; move.l d0,LLhandle
  694.  
  695. ; move.l doslib,a6
  696. ; move.l d0,d1
  697. ; move.l #FLYLINKS,d2
  698. ; move.l #10000,d3
  699. ; jsr -42(a6)
  700.  
  701. ; move.l doslib,a6
  702. ; move.l LLhandle,d1
  703. ; jsr -36(a6)
  704.  
  705.  ************************
  706.  ********
  707.  
  708.  moveq #0,d1
  709.  move.b LEVA,d1
  710.  sub.b #'a',d1
  711.  lsl.w #6,d1
  712.  move.l LINKFILE,a6
  713.  add.l #LevelMusic,a6
  714.  add.l d1,a6
  715.  move.l a6,d1
  716.  
  717.  move.l doslib,a6
  718.  
  719.  move.l #1005,d2
  720.  jsr -30(a6)
  721.  move.l d0,LDhandle
  722.  
  723.  move.l doslib,a6
  724.  move.l d0,d1
  725.  move.l LEVELCLIPS,d2
  726.  move.l #40000,d3
  727.  jsr -42(a6)
  728.  
  729.  move.l doslib,a6
  730.  move.l LDhandle,d1
  731.  jsr -36(a6)
  732.  
  733. *************************************
  734.     move.l    LEVELCLIPS,d0
  735.     moveq    #0,d1
  736.     move.l LEVELMUSIC,a0
  737.     lea    WorkSpace,a1
  738.     lea    $0,a2
  739.     jsr    unLHA
  740. *************************************
  741.  
  742.  
  743.  move.l doslib,a6
  744.  move.l #LDname,d1
  745.  move.l #1005,d2
  746.  jsr -30(a6)
  747.  move.l d0,LDhandle
  748.  
  749.  move.l doslib,a6
  750.  move.l d0,d1
  751.  move.l LEVELCLIPS,d2
  752.  move.l #40000,d3
  753.  jsr -42(a6)
  754.  
  755.  move.l doslib,a6
  756.  move.l LDhandle,d1
  757.  jsr -36(a6)
  758.  
  759. *************************************
  760.     move.l    LEVELCLIPS,d0
  761.     moveq    #0,d1
  762.     move.l LEVELDATA,a0
  763.     lea    WorkSpace,a1
  764.     lea    $0,a2
  765.     jsr    unLHA
  766. *************************************
  767.  
  768. ********
  769.  
  770.  move.l doslib,a6
  771.  move.l #LGname,d1
  772.  move.l #1005,d2
  773.  jsr -30(a6)
  774.  move.l d0,LGhandle
  775.  
  776.  move.l doslib,a6
  777.  move.l d0,d1
  778.  move.l LEVELCLIPS,d2
  779.  move.l #40000,d3
  780.  jsr -42(a6)
  781.  
  782.  move.l doslib,a6
  783.  move.l LGhandle,d1
  784.  jsr -36(a6)
  785.  
  786. *************************************
  787.     move.l    LEVELCLIPS,d0
  788.     moveq    #0,d1
  789.     move.l LEVELGRAPHICS,a0
  790.     lea    WorkSpace,a1
  791.     lea    $0,a2
  792.     jsr    unLHA
  793. *************************************
  794.  
  795. ********
  796.  
  797.  move.l doslib,a6
  798.  move.l #LCname,d1
  799.  move.l #1005,d2
  800.  jsr -30(a6)
  801.  move.l d0,LChandle
  802.  
  803.  move.l doslib,a6
  804.  move.l d0,d1
  805.  move.l #WorkSpace+16384,d2
  806.  move.l #16000,d3
  807.  jsr -42(a6)
  808.  
  809.  move.l doslib,a6
  810.  move.l LChandle,d1
  811.  jsr -36(a6)
  812.  
  813. *************************************
  814.     move.l    #WorkSpace+16384,d0
  815.     moveq    #0,d1
  816.     move.l LEVELCLIPS,a0
  817.     lea    WorkSpace,a1
  818.     lea    $0,a2
  819.     jsr    unLHA
  820. *************************************
  821.  
  822.  
  823. *******
  824.  
  825. noload:
  826.  
  827. ********
  828.  
  829. ; move.l doslib,a6
  830. ; move.l #Prefsname,d1
  831. ; move.l #1005,d2
  832. ; jsr -30(a6)
  833. ; move.l d0,Prefshandle
  834.  
  835. ; move.l doslib,a6
  836. ; move.l d0,d1
  837. ; move.l #Prefsfile,d2
  838. ; move.l #50,d3
  839. ; jsr -42(a6)
  840.  
  841. ; move.l doslib,a6
  842. ; move.l Prefshandle,d1
  843. ; jsr -36(a6)
  844.  
  845. *******
  846.  
  847.  IFNE CD32VER
  848.  move.l doslib,a6
  849.  move.l #115,d1
  850.  jsr -198(a6)
  851.  ENDC
  852.  
  853.  
  854. ; move.l doslib,d0
  855. ; move.l d0,a1
  856. ; move.l 4.w,a6
  857. ; jsr CloseLib(a6)
  858.  
  859.  move.l #$dff000,a6
  860.  
  861. charlie:
  862. ; jmp  ENDGAMESCROLL
  863.  
  864.     move.w #$87c0,dmacon(a6)
  865.  
  866.     move.w    #%1000000000100000,dmacon(a6)
  867.  
  868. ; move.w intenar(a6),saveinters
  869.     
  870.     move.w #%00101111,intena(a6)
  871.  
  872.     move.w #255,adkcon(a6)
  873.  
  874.  
  875. *** Put myself in supervisor mode
  876.  
  877.  bra blag
  878. ; move.l $6c,d0
  879. ; move.l #blag,$6c
  880. ; move.w #$8010,intreq(a6)
  881.  
  882.  rts
  883.  
  884. saveit: ds.l 10
  885. doslibname: dc.b 'dos.library',0
  886.  even
  887. doslib: dc.l 0
  888.  
  889. mors: dc.w 0
  890.  
  891. LDname: dc.b 'tkg2:levels/level_'
  892. LEVA:
  893.  dc.b 'a/twolev.bin',0
  894.  even
  895. LDhandle: dc.l 0
  896. LGname: dc.b 'tkg2:levels/level_'
  897. LEVB:
  898.  dc.b 'a/twolev.graph.bin',0
  899.  even
  900. LGhandle: dc.l 0
  901. LCname: dc.b 'tkg2:levels/level_'
  902. LEVC:
  903.  dc.b 'a/twolev.clips',0
  904.  even
  905. LChandle: dc.l 0
  906. LLname: dc.b 'tkg2:levels/level_'
  907. LEVD:
  908.  dc.b 'a/twolev.map',0
  909.  even
  910. LLFname: dc.b 'tkg2:levels/level_'
  911. LEVE:
  912.  dc.b 'a/twolev.flymap',0
  913.  even
  914. LLhandle: dc.l 0
  915.  
  916.     cnop    0,4
  917.  
  918. Prefsname: dc.b 'ram:prefs',0
  919.  even
  920. Prefshandle: dc.l 0
  921.  
  922.  
  923.  even
  924.  
  925.  cnop 0,4
  926.  
  927. VBLANKInt:
  928.  dc.l 0,0
  929.  dc.b NT_INTERRUPT,9
  930.  dc.l Prefsname
  931.  dc.l 0
  932.  dc.l Chan0inter
  933.  
  934. KEYInt:
  935.  dc.l 0,0
  936.  dc.b NT_INTERRUPT,127
  937.  dc.l Prefsname
  938.  dc.l 0
  939.  dc.l key_interrupt
  940.  
  941. BLITInt:
  942.  dc.l 0,0
  943.  dc.b NT_INTERRUPT,127
  944.  dc.l Prefsname
  945.  dc.l 0
  946.  dc.l BlitterInterrupt
  947.  
  948.  
  949. blag:
  950. ; move.w #$10,intreq(a6)
  951. ; move.l d0,$6c
  952. ; move.w #$7fff,intena(a6)
  953.  
  954. ; move.w #$20,$dff1dc
  955.  
  956. ; move.l 4.w,a6
  957. ; lea VBLANKInt(pc),a1
  958. ; moveq #INTB_COPER,d0
  959. ; jsr _LVOAddIntServer(a6)
  960.  
  961. ****************************
  962. * Initialize level
  963. ****************************
  964. * Poke all clip offsets into
  965. * correct bit of level data.
  966. ****************************
  967.  move.l LEVELGRAPHICS,a0
  968.  move.l 12(a0),a1
  969.  add.l a0,a1
  970.  move.l a1,ZoneGraphAdds
  971.  move.l (a0),a1
  972.  add.l a0,a1
  973.  move.l a1,DoorData
  974.  move.l 4(a0),a1
  975.  add.l a0,a1
  976.  move.l a1,LiftData
  977.  move.l 8(a0),a1
  978.  add.l a0,a1
  979.  move.l a1,SwitchData
  980.  adda.w #16,a0
  981.  move.l a0,ZoneAdds
  982.  
  983.  move.l LEVELDATA,a4
  984.  lea 160*10(a4),a1
  985.  
  986.  lea 54(a1),a2
  987.  move.l a2,CPtPos
  988.  move.w 12(a1),NumCPts
  989.  move.w 14(a1),NumLevPts
  990.  
  991.  move.l 16+6(a1),a2
  992.  add.l a4,a2
  993.  move.l a2,Points
  994.  move.w 8+6(a1),d0
  995.  lea 4(a2,d0.w*4),a2
  996.  move.l a2,PointBrights
  997.  move.w 16(a1),d0
  998.  addq #1,d0
  999.  muls #80,d0
  1000.  add.l d0,a2
  1001.  move.l a2,ZoneBorderPts
  1002.  
  1003.  move.l 20+6(a1),a2
  1004.  add.l a4,a2
  1005.  move.l a2,FloorLines
  1006.  move.w -2(a2),ENDZONE
  1007.  move.l 24+6(a1),a2
  1008.  add.l a4,a2
  1009.  move.l a2,ObjectData
  1010. *****************************************
  1011. * Just for charles
  1012.  
  1013. ; move.w #$6060,6(a2)
  1014. ; move.l #$d0000,8(a2)
  1015. ; sub.w #40,4(a2)
  1016. ; move.w #45*256+45,14(a2)
  1017. ****************************************
  1018.  move.l 28+6(a1),a2
  1019.  add.l a4,a2
  1020.  move.l a2,PlayerShotData
  1021.  move.l 32+6(a1),a2
  1022.  add.l a4,a2
  1023.  move.l a2,NastyShotData
  1024.  
  1025.  add.l #64*20,a2
  1026.  move.l a2,OtherNastyData
  1027.  
  1028.  move.l 36+6(a1),a2
  1029.  add.l a4,a2
  1030.  move.l a2,ObjectPoints  
  1031.  move.l 40+6(a1),a2
  1032.  add.l a4,a2
  1033.  move.l a2,PLR1_Obj
  1034.  move.l 44+6(a1),a2
  1035.  add.l a4,a2
  1036.  move.l a2,PLR2_Obj
  1037.  move.w 14+6(a1),NumObjectPoints
  1038.  
  1039. ; bra noclips
  1040.   
  1041.  move.l LEVELCLIPS,a2
  1042.  moveq #0,d0
  1043.  move.w 10+6(a1),d7    ;numzones
  1044.  move.w d7,NUMZONES
  1045. assignclips:
  1046.  move.l (a0)+,a3
  1047.  add.l a4,a3    ; pointer to a zone
  1048.  adda.w #ToListOfGraph,a3 ; pointer to zonelist
  1049. dowholezone:
  1050.  tst.w (a3)
  1051.  blt.s nomorethiszone
  1052.  tst.w 2(a3)
  1053.  blt.s thisonenull
  1054.  
  1055.  move.l d0,d1
  1056.  asr.l #1,d1
  1057.  move.w d1,2(a3)
  1058.  
  1059. findnextclip:
  1060.  cmp.w #-2,(a2,d0.l)
  1061.  beq.s foundnextclip
  1062.  addq.l #2,d0
  1063.  bra.s findnextclip
  1064. foundnextclip
  1065.  addq.l #2,d0
  1066.  
  1067. thisonenull:
  1068.  addq #8,a3 
  1069.  bra.s dowholezone
  1070. nomorethiszone:
  1071.  dbra d7,assignclips
  1072.  
  1073.  lea (a2,d0.l),a2
  1074.  move.l a2,CONNECT_TABLE
  1075.  
  1076. noclips:
  1077.  
  1078. * Put in addresses of glowything
  1079.  
  1080.  
  1081. ************************************
  1082.  
  1083. ; cmp.b #'k',Prefsfile
  1084. ; bne.s nkb
  1085.  
  1086. ;nkb:
  1087. ; cmp.b #'m',Prefsfile
  1088. ; bne.s nmc
  1089. ; clr.b PLR1KEYS
  1090. ; clr.b PLR1PATH
  1091. ; st PLR1MOUSE
  1092. ; clr.b PLR1JOY
  1093. ;nmc:
  1094. ; cmp.b #'j',Prefsfile
  1095. ; bne.s njc
  1096. ; clr.b PLR1KEYS
  1097. ; clr.b PLR1PATH
  1098. ; clr.b PLR1MOUSE
  1099. ; st PLR1JOY
  1100. ;njc:
  1101.  
  1102.  clr.b PLR1_StoodInTop
  1103.  move.l #playerheight,PLR1s_height
  1104.  
  1105.  move.l #empty,pos1LEFT
  1106.  move.l #empty,pos2LEFT
  1107.  move.l #empty,pos1RIGHT
  1108.  move.l #empty,pos2RIGHT
  1109.  move.l #empty,pos0LEFT
  1110.  move.l #empty,pos3LEFT
  1111.  move.l #empty,pos0RIGHT
  1112.  move.l #empty,pos3RIGHT
  1113.  move.l #emptyend,Samp0endLEFT
  1114.  move.l #emptyend,Samp1endLEFT
  1115.  move.l #emptyend,Samp0endRIGHT
  1116.  move.l #emptyend,Samp1endRIGHT
  1117.  move.l #emptyend,Samp2endLEFT
  1118.  move.l #emptyend,Samp3endLEFT
  1119.  move.l #emptyend,Samp2endRIGHT
  1120.  move.l #emptyend,Samp3endRIGHT
  1121.  
  1122.  
  1123.  move.l #nullline,d0
  1124.  move.w d0,n1l
  1125.  swap d0
  1126.  move.w d0,n1h
  1127.  
  1128.  move.l Panel,d0
  1129.  move.w d0,p1l
  1130.  swap d0
  1131.  move.w d0,p1h
  1132.  swap d0
  1133.  add.l #40,d0
  1134.  move.w d0,p2l
  1135.  swap d0
  1136.  move.w d0,p2h
  1137.  swap d0
  1138.  add.l #40,d0
  1139.  move.w d0,p3l
  1140.  swap d0
  1141.  move.w d0,p3h
  1142.  swap d0
  1143.  add.l #40,d0
  1144.  move.w d0,p4l
  1145.  swap d0
  1146.  move.w d0,p4h
  1147.  swap d0
  1148.  add.l #40,d0
  1149.  move.w d0,p5l
  1150.  swap d0
  1151.  move.w d0,p5h
  1152.  swap d0
  1153.  add.l #40,d0
  1154.  move.w d0,p6l
  1155.  swap d0
  1156.  move.w d0,p6h
  1157.  swap d0
  1158.  add.l #40,d0
  1159.  move.w d0,p7l
  1160.  swap d0
  1161.  move.w d0,p7h
  1162.  swap d0
  1163.  add.l #40,d0
  1164.  move.w d0,p8l
  1165.  swap d0
  1166.  move.w d0,p8h
  1167.  
  1168. *******************************
  1169. * TIMER SCREEN SETUP
  1170. ; move.l #TimerScr,d0
  1171. ; move.w d0,p1l
  1172. ; swap d0
  1173. ; move.w d0,p1h
  1174. ; move.w #$1201,Panelcon
  1175.  
  1176. ; move.l #borders,d0
  1177. ; move.w d0,s0l
  1178. ; swap d0
  1179. ; move.w d0,s0h
  1180. ; move.l #borders+2592,d0
  1181. ; move.w d0,s1l
  1182. ; swap d0
  1183. ; move.w d0,s1h
  1184. ; move.l #borders+2592*2,d0
  1185. ; move.w d0,s2l
  1186. ; swap d0
  1187. ; move.w d0,s2h
  1188. ; move.l #borders+2592*3,d0
  1189. ; move.w d0,s3l
  1190. ; swap d0
  1191. ; move.w d0,s3h
  1192.  
  1193.  move.l #nullspr,d0
  1194.  move.w d0,s0l
  1195.  move.w d0,s1l
  1196.  move.w d0,s2l
  1197.  move.w d0,s3l
  1198.  
  1199.  move.w d0,s4l
  1200.  move.w d0,s5l
  1201.  move.w d0,s6l
  1202.  move.w d0,s7l
  1203.  swap d0
  1204.  
  1205.  move.w d0,s0h
  1206.  move.w d0,s1h
  1207.  move.w d0,s2h
  1208.  move.w d0,s3h
  1209.  
  1210.  move.w d0,s4h
  1211.  move.w d0,s5h
  1212.  move.w d0,s6h
  1213.  move.w d0,s7h 
  1214.  
  1215.  
  1216. ; move.w #52*256+64,borders
  1217. ; move.w #212*256+0,borders+8
  1218. ; move.w #52*256+64,borders+2592
  1219. ; move.w #212*256+128,borders+8+2592
  1220. ; move.w #52*256+192,borders+2592*2
  1221. ; move.w #212*256+0,borders+8+2592*2
  1222. ; move.w #52*256+192,borders+2592*3
  1223. ; move.w #212*256+128,borders+8+2592*3
  1224.  
  1225.  move.l #FacePlace,d0
  1226.  move.w d0,f1l
  1227.  swap d0
  1228.  move.w d0,f1h
  1229.  move.l #FacePlace+32*24,d0
  1230.  move.w d0,f2l
  1231.  swap d0
  1232.  move.w d0,f2h
  1233.  move.l #FacePlace+32*24*2,d0
  1234.  move.w d0,f3l
  1235.  swap d0
  1236.  move.w d0,f3h
  1237.  move.l #FacePlace+32*24*3,d0
  1238.  move.w d0,f4l
  1239.  swap d0
  1240.  move.w d0,f4h
  1241.  move.l #FacePlace+32*24*4,d0
  1242.  move.w d0,f5l
  1243.  swap d0
  1244.  move.w d0,f5h
  1245.   
  1246.  
  1247.  move.l #bigfield,d0
  1248.  move.w d0,ocl
  1249.  swap d0
  1250.  move.w d0,och
  1251.  
  1252.  bset.b #1,$bfe001
  1253.  
  1254. ; jmp stuff
  1255. ;endstuff:
  1256.  
  1257.  move.w #$00ff,$dff09e
  1258.  
  1259. ; move.l #Blurbfield,$dff080
  1260.  
  1261.  move.w #0,d0
  1262.  
  1263.  move.l scrn,d0
  1264.  move.w d0,pl1l
  1265.  swap d0
  1266.  move.w d0,pl1h
  1267.  
  1268.  swap d0
  1269.  add.l #10240,d0
  1270.  move.w d0,pl2l
  1271.  swap d0
  1272.  move.w d0,pl2h
  1273.  
  1274.  swap d0
  1275.  add.l #10240,d0
  1276.  move.w d0,pl3l
  1277.  swap d0
  1278.  move.w d0,pl3h
  1279.  
  1280.  swap d0
  1281.  add.l #10240,d0
  1282.  move.w d0,pl4l
  1283.  swap d0
  1284.  move.w d0,pl4h
  1285.  
  1286.  swap d0
  1287.  add.l #10240,d0
  1288.  move.w d0,pl5l
  1289.  swap d0
  1290.  move.w d0,pl5h
  1291.  
  1292.  swap d0
  1293.  add.l #10240,d0
  1294.  move.w d0,pl6l
  1295.  swap d0
  1296.  move.w d0,pl6h
  1297.  
  1298.  swap d0
  1299.  add.l #10240,d0
  1300.  move.w d0,pl7l
  1301.  swap d0
  1302.  move.w d0,pl7h
  1303.  
  1304.  swap d0
  1305.  add.l #10240,d0
  1306.  move.w d0,pl8l
  1307.  swap d0
  1308.  move.w d0,pl8h
  1309.  
  1310.  
  1311. ****************************
  1312.  jsr INITPLAYER
  1313. ; bsr initobjpos
  1314. ****************************
  1315.  
  1316.  
  1317.  move.l #$dff000,a6
  1318.  
  1319.  move.l #null,$dff0a0
  1320.  move.w #100,$dff0a4
  1321.  move.w #443,$dff0a6
  1322.  move.w #63,$dff0a8
  1323.  
  1324.  move.l #null2,$dff0b0
  1325.  move.w #100,$dff0b4
  1326.  move.w #443,$dff0b6
  1327.  move.w #63,$dff0b8
  1328.  
  1329.  move.l #null4,$dff0c0
  1330.  move.w #100,$dff0c4
  1331.  move.w #443,$dff0c6
  1332.  move.w #63,$dff0c8
  1333.  
  1334.  move.l #null3,$dff0d0
  1335.  move.w #100,$dff0d4
  1336.  move.w #443,$dff0d6
  1337.  move.w #63,$dff0d8
  1338.  
  1339.  ifeq CHEESEY
  1340.  
  1341.  move.l #tab,a1
  1342.  move.w #64,d7
  1343.  move.w #0,d6
  1344. outerlop
  1345.  move.l #pretab,a0
  1346.  move.w #255,d5
  1347. scaledownlop:
  1348.  move.b (a0)+,d0
  1349.  ext.w d0
  1350.  ext.l d0
  1351.  muls d6,d0
  1352.  asr.l #6,d0
  1353.  move.b d0,(a1)+
  1354.  dbra d5,scaledownlop
  1355.  addq #1,d6
  1356.  dbra d7,outerlop
  1357.  
  1358.  endc
  1359.  
  1360.  move.l #$dff000,a6
  1361.  
  1362.  move.w #$c008,intena(a6)
  1363.  
  1364.  move.w #$f,dmacon(a6)
  1365.  move.w #$820f,dmacon(a6)
  1366.  
  1367. ; bsr protinit
  1368.  
  1369.  
  1370. ; move.w #$20,$1dc(a6)
  1371.  
  1372.  move.w #$0,$dff034
  1373.  move.w #0,Conditions
  1374.  
  1375.  cmp.b #'n',mors
  1376.  beq.s .nokeys
  1377.  move.w #%111111111111,Conditions
  1378. .nokeys:
  1379.  
  1380.  move.l #KeyMap,a5
  1381.  clr.b $45(a5)
  1382.  
  1383.  move.l LEVELMUSIC,mt_data
  1384.  clr.b UseAllChannels
  1385.  
  1386. ; cmp.b #'b',Prefsfile+3
  1387. ; bne.s .noback
  1388.  
  1389. *********************************
  1390.  
  1391.  st CHANNELDATA
  1392.  jsr mt_init
  1393.  
  1394. *********************************
  1395.  
  1396.  
  1397. ;.noback:
  1398.  
  1399.  
  1400. ;
  1401. ; clr.b CHANNELDATA
  1402. ; clr.b CHANNELDATA+8
  1403. ; clr.b CHANNELDATA+16
  1404. ; clr.b CHANNELDATA+24
  1405. ;
  1406. ; cmp.b #'b',Prefsfile+3
  1407. ; bne.s noreserve
  1408. ;
  1409.  st CHANNELDATA
  1410.  st CHANNELDATA+8
  1411. ; st CHANNELDATA+16
  1412. ; st CHANNELDATA+24
  1413. ;noreserve: 
  1414.  
  1415. ; st CHANNELDATA
  1416. ; st CHANNELDATA+8
  1417.  
  1418.  move.l SampleList+6*8,pos0LEFT
  1419.  move.l SampleList+6*8+4,Samp0endLEFT
  1420.  move.l #playerheight,PLR1s_targheight
  1421.  move.l #playerheight,PLR1s_height
  1422.  move.l #playerheight,PLR2s_targheight
  1423.  move.l #playerheight,PLR2s_height
  1424.  
  1425. ; cmp.b #'n',mors
  1426. ; beq.s nohandshake
  1427. ;
  1428. ; move.b #%11011000,$bfd200
  1429. ; move.b #%00010000,$bfd000
  1430. ;waitloop:
  1431. ; btst.b #4,$bfd000
  1432. ; bne.s waitloop
  1433. ; move.b #%11000000,$bfd200
  1434.  
  1435. ;wtmouse:
  1436. ; btst #6,$bfe001
  1437. ; bne.s wtmouse
  1438.  
  1439. ;nohandshake:
  1440.  
  1441. ; jmp end
  1442.  
  1443. ; move.l COPSCRN1,drawpt
  1444. ; move.l COPSCRN2,olddrawpt
  1445.  
  1446.  jsr CLEARKEYBOARD
  1447. ; jsr MAKEBACKROUT
  1448.  
  1449.  clr.b MASTERQUITTING
  1450.  
  1451.  cmp.b #'n',mors
  1452.  seq SLAVEQUITTING
  1453.  
  1454. ; move.w #200,PLAYERTWOHEALTH
  1455. ; move.w #200,PLAYERONEHEALTH
  1456.  
  1457. ; move.l #ANOTHERSUP,$80
  1458. ; trap #0
  1459. ; rts
  1460. ;
  1461. ;ANOTHERSUP:
  1462.  
  1463.  move.l $4.w,a6
  1464.  jsr _LVOSuperState(a6)
  1465.  move.l d0,SSTACK
  1466.  
  1467.  CACHE_FREEZE_OFF d2
  1468.  
  1469. ; charlie
  1470. ; DATA_CACHE_ON d2
  1471.  
  1472.  DataCacheOn
  1473.  
  1474.  move.l $4.w,a6
  1475.  move.l SSTACK,d0
  1476.  jsr _LVOUserState(a6)
  1477.  
  1478.  move.l #0,hitcol
  1479.  
  1480.  cmp.b #'n',mors
  1481.  bne.s NOCLTXT
  1482.  
  1483.  move.b #0,lastpressed
  1484. .wtpress
  1485.  btst #6,$bfe001
  1486.  beq.s CLOSETXT
  1487.  btst #7,$bfe001
  1488.  beq.s CLOSETXT
  1489.  tst.b lastpressed
  1490.  beq.s .wtpress
  1491.  
  1492. CLOSETXT:
  1493.  
  1494.  move.w #$8f8,d0
  1495.  move.w #7,d1
  1496.  
  1497. .fdup
  1498.  move.w d0,TXTCOLL
  1499.  move.w d0,MIXCOLL
  1500.  sub.w #$121,d0
  1501. .wtframe:
  1502.  btst #5,$dff000+intreqrl
  1503.  beq.s .wtframe
  1504.  move.w #$0020,$dff000+intreq
  1505.  dbra d1,.fdup
  1506.  
  1507.  move.w #0,TXTCOLL
  1508.  move.w #0,MIXCOLL
  1509.  
  1510. NOCLTXT:
  1511.  
  1512.  
  1513.  
  1514.     move.l    4.w,a6
  1515.     jsr    _LVOForbid(a6)
  1516. ;    jsr    _LVODisable(a6)
  1517.  
  1518.  
  1519. ;    move.w    #%0111111111111111,intena+$dff000
  1520. ;    move.w    #%1000000011111111,intena+$dff000
  1521.  
  1522.  
  1523. ;charlie 
  1524.  move.l #PALETTEBIT,$dff084
  1525.  move.l #bigfield,$dff080    ; Point the copper at our copperlist.
  1526.  
  1527.  
  1528.  clr.b PLR1_Ducked
  1529.  clr.b PLR2_Ducked
  1530.  clr.b p1_ducked
  1531.  clr.b p2_ducked
  1532.  
  1533. ********************************************
  1534.  
  1535. ;    jmp docredits
  1536.  
  1537. ********************************************
  1538.  
  1539.  
  1540.  st doanything
  1541.  st dosounds
  1542.  
  1543.  jsr CLRNASTYMEM
  1544.  
  1545.  move.l #COMPACTMAP,a0
  1546.  move.l a0,LASTZONE
  1547.  move.w #255,d0
  1548. .clrmap
  1549.  move.l #0,(a0)+
  1550.  dbra d0,.clrmap
  1551.  
  1552.  move.l #COMPACTMAP,a0
  1553.  move.l #BIGMAP,a1
  1554.  
  1555.  bra NOALLWALLS
  1556.  
  1557.  move.l ZoneGraphAdds,a2
  1558. DOALLWALLS:
  1559.  move.l (a2),d0
  1560.  beq.s nomorezones
  1561.  move.l d0,a3
  1562.  
  1563.  addq #8,a2
  1564.  
  1565.  add.l LEVELGRAPHICS,a3
  1566.  addq #2,a3
  1567.  move.l a1,a4
  1568.  
  1569. ; DOLOWERROOM
  1570.  
  1571. innerwalls:
  1572.  move.b (a3),d1
  1573.  move.b 1(a3),d0
  1574.  bne doneinner
  1575.  
  1576.  tst.b d1
  1577.  blt noid
  1578.  
  1579.  move.b d1,d3
  1580.  and.w #15,d1
  1581.  
  1582.  moveq #0,d0
  1583.  move.w d1,d2
  1584.  add.w d1,d1
  1585.  add.w d2,d1
  1586.  addq #1,d1
  1587.  bset d1,d0
  1588.  btst #4,d3
  1589.  beq.s .nodoor
  1590.  addq #1,d1
  1591.  bset d1,d0
  1592. .nodoor
  1593.  
  1594.  or.l d0,(a0)
  1595.  
  1596.  move.w 2(a3),(a4)
  1597.  move.w 4(a3),2(a4)
  1598.  
  1599. noid:
  1600.  
  1601.  add.w #30,a3
  1602.  addq #4,a4
  1603.  
  1604.  bra innerwalls
  1605.  
  1606. doneinner:
  1607.  
  1608.  add.w #40,a1
  1609.  addq #4,a0
  1610.  
  1611.  bra DOALLWALLS
  1612. nomorezones:
  1613.  
  1614. NOALLWALLS
  1615.  
  1616.  move.w #96,MIDDLEX
  1617.  move.w #192,RIGHTX
  1618.  move.w #160,BOTTOMY
  1619.  move.w #80,TOTHEMIDDLE
  1620.  clr.b FULLSCR
  1621.  move.l scrn,a0
  1622.  jsr WIPEDISPLAY
  1623.  move.l scrn2,a0
  1624.  jsr WIPEDISPLAY
  1625.  
  1626.  st PLAYERONEGUNS+1
  1627.  st PLAYERTWOGUNS+1
  1628.  
  1629.  move.w #100,timetodamage
  1630.  
  1631.  move.w #299,d0
  1632.  move.l #DAMAGED,a0
  1633. CLRDAM:
  1634.  move.w #0,(a0)+
  1635.  dbra d0,CLRDAM
  1636.  
  1637.  moveq #0,d0
  1638.  move.w d0,STOPOFFSET
  1639.  neg.w d0
  1640.  add.w TOTHEMIDDLE,d0
  1641.  move.w d0,SMIDDLEY
  1642.  muls #320,d0
  1643.  move.l d0,SBIGMIDDLEY
  1644.  
  1645.  move.w #0,PLR1_AIMSPD
  1646.  move.w #0,PLR2_AIMSPD
  1647.  
  1648.  move.l scrn,SCRNSHOWPT
  1649.  
  1650.  move.l scrn2,SCRNDRAWPT
  1651.  
  1652.  
  1653.  
  1654.  move.l #MESSAGEBUFFER,a0
  1655.  move.w #19,d0
  1656. clrmessbuff:
  1657.  move.l #0,(a0)+
  1658.  dbra d0,clrmessbuff
  1659.  
  1660.  move.l #nullmessage,d0
  1661.  jsr SENDMESSAGE
  1662.  
  1663.  clr.b PLR2_fire
  1664.  clr.b p2_fire
  1665.  clr.b PLR2_SPCTAP
  1666.  clr.b p2_spctap
  1667.  
  1668.  clr.b PLR1_dead
  1669.  clr.b PLR2_dead
  1670.  
  1671.  move.l PLR1_Obj,a0
  1672.  move.l PLR2_Obj,a1
  1673.  move.w #0,ImpactX(a0)
  1674.  move.w #0,ImpactY(a0)
  1675.  move.w #0,ImpactZ(a0)
  1676.  move.w #0,ImpactX(a1)
  1677.  move.w #0,ImpactY(a1)
  1678.  move.w #0,ImpactZ(a1)
  1679.  
  1680.  move.l #0,PLR1s_xspdval
  1681.  move.l #0,PLR1s_zspdval
  1682.  move.l #0,PLR1s_yvel
  1683.  move.l #0,PLR2s_xspdval
  1684.  move.l #0,PLR2s_zspdval
  1685.  move.l #0,PLR2s_yvel
  1686.  move.l #0,PLR1_xspdval
  1687.  move.l #0,PLR1_zspdval
  1688.  move.l #0,PLR1_yvel
  1689.  move.l #0,PLR2_xspdval
  1690.  move.l #0,PLR2_zspdval
  1691.  move.l #0,PLR2_yvel
  1692.  
  1693.  
  1694. lop:
  1695.  move.w #%110000000000,$dff034
  1696.  
  1697.  cmp.b #'m',mors
  1698.  bne .notmess
  1699.  tst.b PLR2_dead
  1700.  bne .notmess
  1701.  
  1702.  tst.w PLAYERTWOHEALTH
  1703.  bgt .notmess
  1704.  
  1705.  st PLR2_dead
  1706.  
  1707.  jsr GetRand
  1708.  swap d0
  1709.  clr.w d0
  1710.  swap d0
  1711.  divs #9,d0
  1712.  swap d0
  1713.  muls #160,d0
  1714.  add.l #IVEWONTEXT,d0
  1715.  jsr SENDMESSAGE
  1716.  
  1717.  move.l PLR2_Obj,a0
  1718.  
  1719.  move.l LINKFILE,a6
  1720.  add.l #PLR2ALIEN,a6
  1721.  move.w (a6),d7
  1722.  move.w d7,d1
  1723.  move.l LINKFILE,a6
  1724.  add.l #AlienStats,a6
  1725.  muls #AlienStatLen,d1
  1726.  add.l d1,a6
  1727.  
  1728.  move.b A_TypeOfSplat+1(a6),d0
  1729.  move.b d0,TypeOfSplat
  1730.  
  1731.  move.l PLR2_Roompt,a1
  1732.  move.w (a1),12(a0)
  1733.  move.w p2_xoff,newx
  1734.  move.w p2_zoff,newz
  1735.  move.w #7,d2
  1736.  jsr ExplodeIntoBits
  1737.  move.w #-1,12(a0)
  1738.  
  1739. .notmess:
  1740.  
  1741.  cmp.b #'s',mors
  1742.  bne .notmess2
  1743.  tst.b PLR1_dead
  1744.  bne .notmess2
  1745.  
  1746.  tst.w PLAYERONEHEALTH
  1747.  bgt .notmess2
  1748.  
  1749.  st PLR1_dead
  1750.  
  1751.  jsr GetRand
  1752.  swap d0
  1753.  clr.w d0
  1754.  swap d0
  1755.  divs #9,d0
  1756.  swap d0
  1757.  muls #160,d0
  1758.  add.l #IVEWONTEXT,d0
  1759.  jsr SENDMESSAGE
  1760.  
  1761.  move.l PLR1_Obj,a0
  1762.  
  1763.  move.l LINKFILE,a6
  1764.  add.l #PLR1ALIEN,a6
  1765.  move.w (a6),d7
  1766.  move.w d7,d1
  1767.  move.l LINKFILE,a6
  1768.  add.l #AlienStats,a6
  1769.  muls #AlienStatLen,d1
  1770.  add.l d1,a6
  1771.  
  1772.  move.b A_TypeOfSplat+1(a6),d0
  1773.  move.b d0,TypeOfSplat
  1774.  
  1775.  move.l PLR1_Roompt,a1
  1776.  move.w (a1),12(a0)
  1777.  move.w p1_xoff,newx
  1778.  move.w p1_zoff,newz
  1779.  move.w #7,d2
  1780.  jsr ExplodeIntoBits
  1781.  move.w #-1,12(a0) 
  1782. .notmess2:
  1783.  
  1784.  
  1785.  move.w #%110000000000,$dff034
  1786.  
  1787. ; move.w COUNTER,d0
  1788. ; ext.l d0
  1789. ; divs #10,d0
  1790. ; swap d0
  1791. ; add.b #'0',d0
  1792. ; move.b d0,COUNTSPACE+2
  1793. ; swap d0
  1794. ; ext.l d0
  1795. ; divs #10,d0
  1796. ; swap d0
  1797. ; add.b #'0',d0
  1798. ; move.b d0,COUNTSPACE+1
  1799. ; swap d0
  1800. ; add.b #'0',d0
  1801. ; move.b d0,COUNTSPACE
  1802. ;
  1803. ; move.w COUNTER2,d0
  1804. ; ext.l d0
  1805. ; divs #10,d0
  1806. ; swap d0
  1807. ; add.b #'0',d0
  1808. ; move.b d0,COUNTSPACE+5
  1809. ; swap d0
  1810. ; ext.l d0
  1811. ; divs #10,d0
  1812. ; swap d0
  1813. ; add.b #'0',d0
  1814. ; move.b d0,COUNTSPACE+4
  1815. ; swap d0
  1816. ; add.b #'0',d0
  1817. ; move.b d0,COUNTSPACE+3
  1818.  
  1819. ;
  1820. ; move.l #COUNTSPACE,d0
  1821. ; jsr SENDMESSAGE
  1822. ;
  1823. ; move.w #0,COUNTER
  1824. ; move.w #0,COUNTER2
  1825.  
  1826.  move.b MAPON,REALMAPON
  1827.  
  1828.  move.b FULLSCRTEMP,d0
  1829.  move.b FULLSCR,d1
  1830.  eor.b d1,d0
  1831.  beq .notswapscr2
  1832.  
  1833.  move.b FULLSCRTEMP,FULLSCR
  1834.  beq.s .notswapscr3
  1835.  
  1836.  cmp.w #100,WIDESCRN
  1837.  blt.s .okwidee
  1838.  move.w #100,WIDESCRN
  1839. .okwidee:
  1840.  
  1841.  move.w #144,MIDDLEX
  1842.  move.w #288,RIGHTX
  1843.  move.w #232,BOTTOMY
  1844.  move.w #120,TOTHEMIDDLE
  1845.  move.l SCRNSHOWPT,a0
  1846.  jsr WIPEDISPLAY
  1847.  move.l SCRNDRAWPT,a0
  1848.  jsr WIPEDISPLAY
  1849.  
  1850.  bra.s .notswapscr2
  1851.  
  1852. .notswapscr3:
  1853.  cmp.w #60,WIDESCRN
  1854.  blt.s .okwide
  1855.  move.w #60,WIDESCRN
  1856. .okwide:
  1857.  
  1858.  
  1859.  move.w #96,MIDDLEX
  1860.  move.w #192,RIGHTX
  1861.  move.w #160,BOTTOMY
  1862.  move.w #80,TOTHEMIDDLE
  1863.  move.l SCRNSHOWPT,a0
  1864.  jsr WIPEDISPLAY
  1865.  move.l SCRNDRAWPT,a0
  1866.  jsr WIPEDISPLAY
  1867. .notswapscr2:
  1868.  
  1869.  
  1870.  btst #6,$bfe001
  1871. ;charlie bne.b .nocop
  1872.  
  1873. ;charlie move.l #bigfield,$dff080    ; Point the copper at our copperlist.
  1874.  
  1875. .nocop
  1876.  
  1877.  move.l #KeyMap,a5
  1878.  
  1879.  cmp.b #'n',mors
  1880.  bne .nopause
  1881.  tst.b $19(a5)
  1882.  beq.s .nopause
  1883.  clr.b doanything
  1884.  
  1885. .waitrel:
  1886.  
  1887.  tst.b PLR1JOY
  1888.  beq.s .NOJOY
  1889.  jsr _ReadJoy1
  1890. .NOJOY
  1891.  
  1892.  tst.b $19(a5)
  1893.  bne.s .waitrel
  1894.  
  1895.  bsr PAUSEOPTS
  1896.  
  1897.  st doanything
  1898. .nopause: 
  1899.  
  1900.  move.l hitcol,d0
  1901.  move.l d0,d1
  1902.  
  1903. ********************************************
  1904. * Remove after colour testing 
  1905. ; moveq #0,d1
  1906. ********************************************
  1907.  
  1908.  add.l #PALETTEBIT,d1
  1909.  tst.l d0
  1910.  beq.s nofadedownhc
  1911.  sub.l #2116,d0
  1912.  move.l d0,hitcol
  1913. nofadedownhc:
  1914.  
  1915.  move.l d1,a0
  1916.  move.l #PALETTESPACE,a1
  1917.  move.l #(2116/4)-2,d0
  1918. putinpal:
  1919.  move.l (a0)+,(a1)+
  1920.  dbra d0,putinpal
  1921.  
  1922.  st READCONTROLS
  1923.  move.l #$dff000,a6
  1924.  
  1925.  
  1926.  cmp.b #'n',mors
  1927.  beq .nopause
  1928.  
  1929.  move.b SLAVEPAUSE,d0
  1930.  or.b MASTERPAUSE,d0
  1931.  beq.s .nopause
  1932.  clr.b doanything
  1933.  
  1934.  move.l #KeyMap,a5
  1935. .waitrel:
  1936.  
  1937.  cmp.b #'s',mors
  1938.  beq.s .RE2
  1939.  tst.b PLR1JOY
  1940.  beq.s .NOJOY
  1941.  jsr _ReadJoy1
  1942.  bra .RE1
  1943. .RE2:
  1944.  tst.b PLR2JOY
  1945.  beq.s .NOJOY
  1946.  jsr _ReadJoy2
  1947. .RE1
  1948. .NOJOY:
  1949.  tst.b $19(a5)
  1950.  bne.s .waitrel
  1951.  
  1952.  bsr PAUSEOPTS
  1953.  
  1954.  cmp.b #'m',mors
  1955.  bne.s .slavelast
  1956.  Jsr SENDFIRST
  1957.  bra .masfirst
  1958. .slavelast
  1959.  Jsr RECFIRST
  1960. .masfirst:
  1961.  clr.b SLAVEPAUSE
  1962.  clr.b MASTERPAUSE
  1963.  st doanything
  1964.  
  1965. .nopause: 
  1966.  
  1967.  
  1968.  move.l drawpt,d0
  1969.  move.l olddrawpt,drawpt
  1970.  move.l d0,olddrawpt
  1971.  
  1972.  move.l SCRNDRAWPT,d0
  1973.  move.l SCRNSHOWPT,SCRNDRAWPT
  1974.  move.l d0,SCRNSHOWPT
  1975.  
  1976. ; move.l d0,$dff084    
  1977.  move.l drawpt,a3
  1978. ; move.l COPSCRNBUFF,a3
  1979.  adda.w #10,a3
  1980.  move.l a3,frompt
  1981.  add.l #104*4*40,a3
  1982.  move.l a3,midpt
  1983.  
  1984.  cmp.b #'s',mors
  1985.  beq.s nowaitslave
  1986.  
  1987. waitfortop:
  1988.  
  1989.  btst.b #0,intreqrl(a6)
  1990.  beq.b waitfortop
  1991.  
  1992.  move.w #$1,intreq(a6)
  1993. ; move.l #PLR1_GunData,GunData
  1994.  move.b PLR1_GunSelected,GunSelected
  1995.  bra waitmaster
  1996.  
  1997. nowaitslave:
  1998. ; move.l #PLR2_GunData,GunData
  1999.  move.b PLR2_GunSelected,GunSelected
  2000. waitmaster:
  2001.  
  2002.  move.l d0,d1
  2003.  move.l d1,d0
  2004.  move.w d0,pl1l
  2005.  swap d0
  2006.  move.w d0,pl1h
  2007.  
  2008.  add.l #10240,d1
  2009.  move.l d1,d0
  2010.  move.w d0,pl2l
  2011.  swap d0
  2012.  move.w d0,pl2h
  2013.  
  2014.  add.l #10240,d1
  2015.  move.l d1,d0
  2016.  move.w d0,pl3l
  2017.  swap d0
  2018.  move.w d0,pl3h
  2019.  
  2020.  add.l #10240,d1
  2021.  move.l d1,d0
  2022.  move.w d0,pl4l
  2023.  swap d0
  2024.  move.w d0,pl4h
  2025.  
  2026.  add.l #10240,d1
  2027.  move.l d1,d0
  2028.  move.w d0,pl5l
  2029.  swap d0
  2030.  move.w d0,pl5h
  2031.  
  2032.  add.l #10240,d1
  2033.  move.l d1,d0
  2034.  move.w d0,pl6l
  2035.  swap d0
  2036.  move.w d0,pl6h
  2037.  
  2038.  add.l #10240,d1
  2039.  move.l d1,d0
  2040.  move.w d0,pl7l
  2041.  swap d0
  2042.  move.w d0,pl7h
  2043.  
  2044.  add.l #10240,d1
  2045.  move.l d1,d0
  2046.  move.w d0,pl8l
  2047.  swap d0
  2048.  move.w d0,pl8h 
  2049.  
  2050.  move.l #SMIDDLEY,a0
  2051.  movem.l (a0)+,d0/d1
  2052.  move.l d0,MIDDLEY
  2053.  move.l d1,MIDDLEY+4
  2054.  
  2055.  move.l waterpt,a0
  2056.  move.l (a0)+,watertouse
  2057.  cmp.l #endwaterlist,a0
  2058.  blt.s okwat
  2059.  move.l #waterlist,a0
  2060. okwat:
  2061.  move.l a0,waterpt
  2062.  
  2063.  add.w #640,wtan
  2064.  and.w #8191,wtan
  2065.  add.l #1,wateroff
  2066.  and.l #$3fff3fff,wateroff
  2067.  
  2068.  move.l PLR1_xoff,OLDX1
  2069.  move.l PLR1_zoff,OLDZ1
  2070.  move.l PLR2_xoff,OLDX2
  2071.  move.l PLR2_zoff,OLDZ2
  2072.  
  2073.  move.l #$dff000,a6
  2074.  
  2075.  cmp.b #'s',mors
  2076.  beq ASlaveShouldWaitOnHisMaster
  2077.  
  2078.  cmp.b #'n',mors
  2079.  bne NotOnePlayer
  2080.  
  2081.  movem.l d0-d7/a0-a6,-(a7)
  2082.  
  2083.  moveq #0,d0
  2084.  move.b GunSelected,d0
  2085.  move.l LINKFILE,a6
  2086.  add.l #GunBulletTypes,a6
  2087.  move.w (a6,d0.w*8),d0
  2088.  
  2089.  move.l #PLAYERONEAMMO,a6
  2090.  move.w (a6,d0.w*2),d0
  2091.  move.w d0,Ammo
  2092.  movem.l (a7)+,d0-d7/a0-a6
  2093.  
  2094.  move.w PLAYERONEHEALTH,Energy
  2095.  
  2096.  move.w FramesToDraw,TempFrames
  2097.  cmp.w #15,TempFrames
  2098.  blt.s .okframe
  2099.  move.w #15,TempFrames
  2100. .okframe:
  2101.  move.w #0,FramesToDraw
  2102.  
  2103. *********************************************
  2104. *********** TAKE THIS OUT *******************
  2105. *********************************************
  2106.  
  2107.  move.l CHEATPTR,a4
  2108.  add.l #200000,a4
  2109.  moveq #0,d0
  2110.  move.b (a4),d0
  2111.  
  2112.  move.l #KeyMap,a5
  2113.  tst.b (a5,d0.w)
  2114.  beq.s .nocheat
  2115.  
  2116.  addq #1,a4
  2117.  cmp.l #ENDCHEAT,a4
  2118.  blt.s .nocheat
  2119.  cmp.w #0,CHEATNUM
  2120.  beq.s .nocheat
  2121.  sub.w #1,CHEATNUM
  2122.  move.l #CHEATFRAME,a4
  2123.  move.w #127,PLR1_energy
  2124.  jsr EnergyBar
  2125. .nocheat
  2126.  
  2127.  sub.l #200000,a4
  2128.  move.l a4,CHEATPTR
  2129.  
  2130. **********************************************
  2131. **********************************************
  2132. **********************************************
  2133.  
  2134.  move.l PLR1s_xoff,p1_xoff
  2135.  move.l PLR1s_zoff,p1_zoff
  2136.  move.l PLR1s_yoff,p1_yoff
  2137.  move.l PLR1s_height,p1_height
  2138.  move.w PLR1s_angpos,p1_angpos
  2139.  move.w PLR1_bobble,p1_bobble
  2140.  move.b PLR1_clicked,p1_clicked
  2141.  move.b PLR1_fire,p1_fire
  2142.  clr.b PLR1_clicked
  2143.  move.b PLR1_SPCTAP,p1_spctap
  2144.  clr.b PLR1_SPCTAP
  2145.  move.b PLR1_Ducked,p1_ducked
  2146.  move.b PLR1_GunSelected,p1_gunselected
  2147.  
  2148.  bsr PLR1_Control
  2149.  
  2150.  move.l PLR1_Roompt,a0
  2151.  move.l ToZoneRoof(a0),SplitHeight
  2152.  move.w p1_xoff,THISPLRxoff
  2153.  move.w p1_zoff,THISPLRzoff
  2154.  
  2155.  
  2156.  move.l #$60000,p2_yoff
  2157.  move.l PLR2_Obj,a0
  2158.  move.w #-1,GraphicRoom(a0)
  2159.  move.w #-1,12(a0)
  2160.  move.b #0,17(a0)
  2161.  move.l #BollocksRoom,PLR2_Roompt
  2162.  
  2163.  bra donetalking
  2164.  
  2165. NotOnePlayer:
  2166.  move.l #KeyMap,a5
  2167.  tst.b $19(a5)
  2168.  sne MASTERPAUSE
  2169.  
  2170. *********************************
  2171.  move.w PLAYERONEHEALTH,Energy
  2172. ; change this back
  2173. *********************************
  2174.  movem.l d0-d7/a0-a6,-(a7)
  2175.  
  2176.  moveq #0,d0
  2177.  move.b GunSelected,d0
  2178.  move.l LINKFILE,a6
  2179.  add.l #GunBulletTypes,a6
  2180.  move.w (a6,d0.w*8),d0
  2181.  
  2182.  move.l #PLAYERONEAMMO,a6
  2183.  move.w (a6,d0.w*2),d0
  2184.  move.w d0,Ammo
  2185.  movem.l (a7)+,d0-d7/a0-a6
  2186.  
  2187.  jsr SENDFIRST
  2188.  
  2189.  move.w FramesToDraw,TempFrames
  2190.  cmp.w #15,TempFrames
  2191.  blt.s .okframe
  2192.  move.w #15,TempFrames
  2193. .okframe:
  2194.  move.w #0,FramesToDraw
  2195.  
  2196.  move.l PLR1s_xoff,p1_xoff
  2197.  move.l PLR1s_zoff,p1_zoff
  2198.  move.l PLR1s_yoff,p1_yoff
  2199.  move.l PLR1s_height,p1_height
  2200.  move.w PLR1s_angpos,p1_angpos
  2201.  move.w PLR1_bobble,p1_bobble
  2202.  move.b PLR1_clicked,p1_clicked
  2203.  clr.b PLR1_clicked
  2204.  move.b PLR1_fire,p1_fire
  2205.  move.b PLR1_SPCTAP,p1_spctap
  2206.  clr.b PLR1_SPCTAP
  2207.  move.b PLR1_Ducked,p1_ducked
  2208.  move.b PLR1_GunSelected,p1_gunselected
  2209.  
  2210.  move.l PLR1_AIMSPD,d0
  2211.  jsr SENDFIRST
  2212.  move.l d0,PLR2_AIMSPD
  2213.  
  2214.  move.l p1_xoff,d0
  2215.  jsr SENDFIRST
  2216.  move.l d0,p2_xoff
  2217.  
  2218.  move.l p1_zoff,d0
  2219.  jsr SENDFIRST
  2220.  move.l d0,p2_zoff 
  2221.  
  2222.  move.l p1_yoff,d0
  2223.  jsr SENDFIRST
  2224.  move.l d0,p2_yoff
  2225.   
  2226.  move.l p1_height,d0
  2227.  jsr SENDFIRST
  2228.  move.l d0,p2_height
  2229.  
  2230.  move.w p1_angpos,d0
  2231.  swap d0
  2232.  move.w p1_bobble,d0
  2233.  jsr SENDFIRST
  2234.  move.w d0,p2_bobble
  2235.  swap d0
  2236.  move.w d0,p2_angpos
  2237.  
  2238.  
  2239.  move.w TempFrames,d0
  2240.  swap d0
  2241.  move.b p1_spctap,d0
  2242.  lsl.w #8,d0
  2243.  move.b p1_clicked,d0
  2244.  jsr SENDFIRST
  2245.  move.b d0,p2_clicked
  2246.  lsr.w #8,d0
  2247.  move.b d0,p2_spctap
  2248.  
  2249.  move.w Rand1,d0
  2250.  swap d0
  2251.  move.b p1_ducked,d0
  2252.  or.b PLR1_Squished,d0
  2253.  lsl.w #8,d0
  2254.  move.b p1_gunselected,d0
  2255.  jsr SENDFIRST
  2256.  move.b d0,p2_gunselected
  2257.  lsr.w #8,d0
  2258.  move.b d0,p2_ducked
  2259.  
  2260.  move.b p1_fire,d0
  2261.  lsl.w #8,d0
  2262.  move.b MASTERQUITTING,d0
  2263.  or.b d0,SLAVEQUITTING
  2264.  swap d0
  2265.  move.b MASTERPAUSE,d0
  2266.  or.b d0,SLAVEPAUSE
  2267.  jsr SENDFIRST
  2268.  or.b d0,MASTERPAUSE
  2269.  or.b d0,SLAVEPAUSE
  2270.  swap d0
  2271.  or.b d0,SLAVEQUITTING
  2272.  or.b d0,MASTERQUITTING
  2273.  lsr.w #8,d0
  2274.  move.b d0,p2_fire
  2275.  
  2276.  move.w PLAYERONEHEALTH,d0
  2277.  jsr SENDFIRST
  2278.  move.w d0,PLAYERTWOHEALTH
  2279.  
  2280.  bsr PLR1_Control
  2281.  bsr PLR2_Control
  2282.  move.l PLR1_Roompt,a0
  2283.  move.l ToZoneRoof(a0),SplitHeight
  2284.  move.w p1_xoff,THISPLRxoff
  2285.  move.w p1_zoff,THISPLRzoff
  2286.  
  2287.  bra donetalking
  2288.  
  2289. ASlaveShouldWaitOnHisMaster:
  2290.  
  2291.  move.l #KeyMap,a5
  2292.  tst.b $19(a5)
  2293.  sne SLAVEPAUSE
  2294.  
  2295.  movem.l d0-d7/a0-a6,-(a7)
  2296.  
  2297.  moveq #0,d0
  2298.  move.b GunSelected,d0
  2299.  move.l LINKFILE,a6
  2300.  add.l #GunBulletTypes,a6
  2301.  move.w (a6,d0.w*8),d0
  2302.  
  2303.  move.l #PLAYERTWOAMMO,a6
  2304.  move.w (a6,d0.w*2),d0
  2305.  move.w d0,Ammo
  2306.  movem.l (a7)+,d0-d7/a0-a6
  2307.  
  2308.  move.w PLAYERTWOHEALTH,Energy
  2309.  
  2310.  jsr RECFIRST
  2311.  
  2312.  
  2313.  
  2314.  
  2315.  
  2316.  
  2317.  
  2318.  
  2319.  move.l PLR2s_xoff,p2_xoff
  2320.  move.l PLR2s_zoff,p2_zoff
  2321.  move.l PLR2s_yoff,p2_yoff
  2322.  move.l PLR2s_height,p2_height
  2323.  move.w PLR2s_angpos,p2_angpos
  2324.  move.w PLR2_bobble,p2_bobble
  2325.  move.b PLR2_clicked,p2_clicked
  2326.  clr.b PLR2_clicked
  2327.  move.b PLR2_fire,p2_fire
  2328.  move.b PLR2_SPCTAP,p2_spctap
  2329.  clr.b PLR2_SPCTAP
  2330.  move.b PLR2_Ducked,p2_ducked
  2331.  move.b PLR2_GunSelected,p2_gunselected
  2332.  
  2333.  move.l PLR2_AIMSPD,d0
  2334.  jsr RECFIRST
  2335.  move.l d0,PLR1_AIMSPD
  2336.  
  2337.  move.l p2_xoff,d0
  2338.  jsr RECFIRST
  2339.  move.l d0,p1_xoff
  2340.  
  2341.  move.l p2_zoff,d0
  2342.  jsr RECFIRST
  2343.  move.l d0,p1_zoff
  2344.  
  2345.  move.l p2_yoff,d0
  2346.  jsr RECFIRST
  2347.  move.l d0,p1_yoff
  2348.  
  2349.  move.l p2_height,d0
  2350.  jsr RECFIRST
  2351.  move.l d0,p1_height
  2352.  
  2353.  move.w p2_angpos,d0
  2354.  swap d0
  2355.  move.w p2_bobble,d0
  2356.  jsr RECFIRST
  2357.  move.w d0,p1_bobble
  2358.  swap d0
  2359.  move.w d0,p1_angpos
  2360.  
  2361.  
  2362.  move.b p2_spctap,d0
  2363.  lsl.w #8,d0
  2364.  move.b p2_clicked,d0
  2365.  jsr RECFIRST
  2366.  move.b d0,p1_clicked
  2367.  lsr.w #8,d0
  2368.  move.b d0,p1_spctap
  2369.  swap d0
  2370.  move.w d0,TempFrames
  2371.  
  2372.  move.b p2_ducked,d0
  2373.  or.b PLR2_Squished,d0
  2374.  lsl.w #8,d0
  2375.  move.b p2_gunselected,d0
  2376.  jsr RECFIRST
  2377.  move.b d0,p1_gunselected
  2378.  lsr.w #8,d0
  2379.  move.b d0,p1_ducked
  2380.  swap d0
  2381.  move.w d0,Rand1
  2382.  
  2383.  move.b p2_fire,d0
  2384.  lsl.w #8,d0
  2385.  move.b SLAVEQUITTING,d0
  2386.  or.b d0,MASTERQUITTING
  2387.  swap d0
  2388.  move.b SLAVEPAUSE,d0
  2389.  or.b d0,MASTERPAUSE
  2390.  jsr RECFIRST
  2391.  or.b d0,MASTERPAUSE
  2392.  or.b d0,SLAVEPAUSE
  2393.  swap d0
  2394.  or.b d0,SLAVEQUITTING
  2395.  or.b d0,MASTERQUITTING
  2396.  lsr.w #8,d0
  2397.  move.b d0,p1_fire
  2398.  
  2399.  move.w PLAYERTWOHEALTH,d0
  2400.  jsr RECFIRST
  2401.  move.w d0,PLAYERONEHEALTH
  2402.  
  2403.  bsr PLR1_Control
  2404.  bsr PLR2_Control
  2405.  move.w p2_xoff,THISPLRxoff
  2406.  move.w p2_zoff,THISPLRzoff
  2407.  move.l PLR2_Roompt,a0
  2408.  move.l ToZoneRoof(a0),SplitHeight
  2409.  
  2410. donetalking:
  2411.  
  2412.  
  2413.  move.l #ZoneBrightTable,a1
  2414.  move.l ZoneAdds,a2
  2415.  move.l PLR2_ListOfGraphRooms,a0
  2416. ; move.l PLR2_PointsToRotatePtr,a5
  2417.  move.l a0,a5
  2418.  cmp.b #'s',mors
  2419.  beq.s doallz
  2420.  move.l PLR1_ListOfGraphRooms,a0
  2421. ; move.l PLR1_PointsToRotatePtr,a5
  2422.  move.l a0,a5 
  2423. doallz
  2424.  move.w (a0),d0
  2425.  blt.s doneallz
  2426.  add.w #8,a0
  2427.  
  2428.  move.l (a2,d0.w*4),a3
  2429.  add.l LEVELDATA,a3
  2430.  move.w ToZoneBrightness(a3),d2
  2431.  
  2432.  blt.s justbright
  2433.  move.w d2,d3
  2434.  lsr.w #8,d3
  2435.  tst.b d3
  2436.  beq.s justbright
  2437.  
  2438.  move.l #BrightAnimTable,a4
  2439.  move.w -2(a4,d3.w*2),d2
  2440.  
  2441. justbright:
  2442.  muls #32,d2
  2443.  divs #20,d2
  2444.  move.w d2,(a1,d0.w*4)
  2445.  
  2446.  move.w ToUpperBrightness(a3),d2
  2447.  
  2448.  blt.s justbright2
  2449.  move.w d2,d3
  2450.  lsr.w #8,d3
  2451.  tst.b d3
  2452.  beq.s justbright2
  2453.  
  2454.  move.l #BrightAnimTable,a4
  2455.  move.w -2(a4,d3.w*2),d2
  2456.  
  2457. justbright2:
  2458.  
  2459.  muls #32,d2
  2460.  divs #20,d2
  2461.  move.w d2,2(a1,d0.w*4)
  2462.  
  2463.  bra doallz
  2464.  
  2465. doneallz:
  2466.  
  2467.  move.l PointBrights,a2
  2468.  move.l #CurrentPointBrights,a3
  2469. justtheone:
  2470.  move.w (a5),d0
  2471.  blt whythehell
  2472.  addq #8,a5
  2473.  
  2474.  muls #40,d0
  2475.  
  2476.  move.w #39,d7
  2477.  
  2478. allinzone:
  2479.  move.w (a2,d0.w*2),d2
  2480.  
  2481.  tst.b d2
  2482.  blt.s .justbright
  2483.  move.w d2,d3
  2484.  lsr.w #8,d3
  2485.  tst.b d3
  2486.  beq.s .justbright
  2487.  
  2488.  move.w d3,d4
  2489.  and.w #$f,d3
  2490.  lsr.w #4,d4
  2491.  add.w #1,d4
  2492.  move.l #BrightAnimTable,a0
  2493.  move.w -2(a0,d3.w*2),d3
  2494.  ext.w d2
  2495.  sub.w d2,d3
  2496.  muls d4,d3
  2497.  asr.w #4,d3
  2498.  add.w d3,d2
  2499.  
  2500. .justbright:
  2501.  ext.w d2
  2502.  
  2503.  muls #31,d2
  2504.  divs #20,d2
  2505.  bge.s .itspos
  2506.  sub.w #600,d2
  2507. .itspos:
  2508.  add.w #300,d2
  2509.  
  2510.  move.w d2,(a3,d0.w*2)
  2511.  addq #1,d0
  2512.  dbra d7,allinzone
  2513.  
  2514.  bra justtheone
  2515.  
  2516. whythehell:
  2517.  
  2518.  move.l PLR1_Roompt,a0
  2519.  move.l #CurrentPointBrights,a1
  2520.  move.l ZoneBorderPts,a2
  2521.  move.w (a0),d0
  2522.  muls #10,d0
  2523.  lea (a2,d0.w*2),a2
  2524.  lea (a1,d0.w*8),a1
  2525.  
  2526.  moveq #9,d7
  2527.  moveq #0,d0
  2528.  moveq #0,d1
  2529. findaverage:
  2530.  tst.w (a2)+
  2531.  blt.s .foundaverage
  2532.  addq #1,d0
  2533.  move.w (a1)+,d2
  2534.  bge.s .okpos
  2535.  neg.w d2
  2536. .okpos:
  2537.  add.w d2,d1
  2538.  
  2539.  dbra d7,findaverage
  2540.  
  2541. .foundaverage:
  2542.  
  2543.  ext.l d1
  2544.  divs d0,d1
  2545.  sub.w #300,d1
  2546.  move.w d1,PLR1_RoomBright
  2547.  
  2548.  cmp.b #'n',mors
  2549.  beq nosee
  2550.  
  2551.  move.l PLR1_Roompt,FromRoom
  2552.  move.l PLR2_Roompt,ToRoom
  2553.  move.w p1_xoff,Viewerx
  2554.  move.w p1_zoff,Viewerz
  2555.  move.l p1_yoff,d0
  2556.  asr.l #7,d0
  2557.  move.w d0,Viewery
  2558.  move.w p2_xoff,Targetx
  2559.  move.w p2_zoff,Targetz
  2560.  move.l p2_yoff,d0
  2561.  asr.l #7,d0
  2562.  move.w d0,Targety
  2563.  move.b PLR1_StoodInTop,ViewerTop
  2564.  move.b PLR2_StoodInTop,TargetTop
  2565.  jsr CanItBeSeen
  2566.  
  2567.  move.l PLR1_Obj,a0
  2568.  move.b CanSee,d0
  2569.  and.b #2,d0
  2570.  move.b d0,17(a0)
  2571.  move.l PLR2_Obj,a0
  2572.  move.b CanSee,d0
  2573.  and.b #1,d0
  2574.  move.b d0,17(a0)
  2575.  
  2576. nosee:
  2577.  
  2578.  
  2579.  move.w TempFrames,d0
  2580.  add.w d0,p1_holddown
  2581.  cmp.w #30,p1_holddown
  2582.  blt.s oklength
  2583.  move.w #30,p1_holddown
  2584. oklength:
  2585.  
  2586.  tst.b p1_fire
  2587.  bne.s okstillheld
  2588.  sub.w d0,p1_holddown
  2589.  bge.s okstillheld
  2590.  move.w #0,p1_holddown
  2591.  
  2592. okstillheld:
  2593.  
  2594.  move.w TempFrames,d0
  2595.  add.w d0,p2_holddown
  2596.  
  2597.  cmp.w #30,p2_holddown
  2598.  blt.s oklength2
  2599.  move.w #30,p2_holddown
  2600. oklength2:
  2601.  
  2602.  
  2603.  tst.b p2_fire
  2604.  bne.s okstillheld2
  2605.  sub.w d0,p2_holddown
  2606.  bge.s okstillheld2
  2607.  move.w #0,p2_holddown
  2608. okstillheld2:
  2609.  
  2610. ***** CHECKING LIGHT *********
  2611.  
  2612. ; move.w #-20,d0
  2613. ; move.w PLR1_xoff,d1
  2614. ; move.w PLR1_zoff,d2
  2615. ; move.l PLR1_Roompt,a0
  2616. ; move.w (a0),d3
  2617. ; move.w PLR1_angpos,d4
  2618. ;
  2619. ; jsr BRIGHTENPOINTSANGLE
  2620.  
  2621. ******************************
  2622.  
  2623. ; move.l #PLR1_GunData,a1
  2624. ; move.w p1_holddown,d0
  2625. ; move.w #50,10+32*3(a1)
  2626. ; move.l #PLR2_GunData,a1
  2627. ; move.w p2_holddown,d0
  2628. ; move.w #50,10+32*3(a1)
  2629.  
  2630. ******************************************
  2631. ******************************************
  2632.  
  2633.  move.w TempFrames,d1
  2634.  bgt.s noze
  2635.  moveq #1,d1
  2636. noze:
  2637.  
  2638.  move.w PLR1_xoff,d0
  2639.  sub.w OLDX1,d0
  2640.  asl.w #4,d0
  2641.  ext.l d0
  2642.  divs d1,d0
  2643.  move.w d0,XDIFF1
  2644.  move.w PLR2_xoff,d0
  2645.  sub.w OLDX2,d0
  2646.  asl.w #4,d0
  2647.  ext.l d0
  2648.  divs d1,d0
  2649.  move.w d0,XDIFF2
  2650.  move.w PLR1_zoff,d0
  2651.  sub.w OLDZ1,d0
  2652.  asl.w #4,d0
  2653.  ext.l d0
  2654.  divs d1,d0
  2655.  move.w d0,ZDIFF1
  2656.  move.w PLR2_zoff,d0
  2657.  sub.w OLDZ2,d0
  2658.  asl.w #4,d0
  2659.  ext.l d0
  2660.  divs d1,d0
  2661.  move.w d0,ZDIFF2
  2662.  
  2663.  cmp.b #'s',mors
  2664.  beq.s ImPlayer2OhYesIAm
  2665.  bsr USEPLR1
  2666.  bra IWasPlayer1
  2667.  
  2668. ImPlayer2OhYesIAm:
  2669.  bsr USEPLR2
  2670. IWasPlayer1:
  2671.  
  2672.  
  2673.  cmp.b #'s',mors
  2674.  beq drawplayer2
  2675.  
  2676.  move.w #0,scaleval
  2677.  
  2678.  move.l PLR1_xoff,xoff
  2679.  move.l PLR1_yoff,yoff
  2680.  move.l PLR1_zoff,zoff
  2681.  move.w PLR1_angpos,angpos
  2682.  move.w PLR1_cosval,cosval
  2683.  move.w PLR1_sinval,sinval
  2684.  
  2685.  
  2686.  move.l PLR1_ListOfGraphRooms,ListOfGraphRooms
  2687.  move.l PLR1_PointsToRotatePtr,PointsToRotatePtr
  2688.  move.b PLR1_Echo,PLREcho
  2689.  move.l PLR1_Roompt,Roompt
  2690.  
  2691.  move.l #KeyMap,a5
  2692.  moveq #0,d5
  2693.  move.b look_behind_key,d5
  2694.  tst.b (a5,d5.w)
  2695.  beq.s .nolookback
  2696.  
  2697.  move.l PLR1_Obj,a0
  2698.  move.w #-1,12+128(a0)
  2699.  
  2700.  eor.w #4096,angpos 
  2701.  neg.w cosval
  2702.  neg.w sinval
  2703. .nolookback:
  2704.  
  2705.  jsr OrderZones
  2706.  jsr objmoveanim
  2707.  jsr EnergyBar
  2708.  jsr AmmoBar
  2709.  
  2710.  
  2711. ;********************************************
  2712. ;************* Do reflection ****************
  2713. ;
  2714. ; move.l ListOfGraphRooms,a0
  2715. ; move.l ZoneAdds,a1
  2716. ;checkwaterheights
  2717. ; move.w (a0),d0
  2718. ; blt allzonesdone
  2719. ; addq #8,a0
  2720. ; move.l (a1,d0.w*4),a2
  2721. ; add.l LEVELDATA,a2
  2722. ; move.l ToZoneWater(a2),d0
  2723. ; cmp.l ToZoneFloor(a2),d0
  2724. ; blt.s WEHAVEAHEIGHT
  2725. ; bra.s checkwaterheights
  2726. ;
  2727. ;WEHAVEAHEIGHT:
  2728. ;
  2729. ; sub.l yoff,d0
  2730. ; blt.s underwater
  2731. ; add.l d0,d0
  2732. ; add.l d0,yoff
  2733. ; move.l FASTBUFFER2,FASTBUFFER
  2734. ; move.w #0,leftclip
  2735. ; move.w RIGHTX,rightclip
  2736. ; move.w #0,deftopclip
  2737. ; move.w #BOTTOMY/2,defbotclip
  2738. ; move.w #0,topclip
  2739. ; move.w #BOTTOMY/2,botclip
  2740. ;
  2741. ; clr.b DOANYWATER 
  2742. ; bsr DrawDisplay
  2743. ;allzonesdone:
  2744. ;underwater:
  2745.  
  2746. ********************************************
  2747.  
  2748.  st DOANYWATER
  2749.  
  2750.  move.l PLR1_yoff,yoff
  2751.  
  2752.  move.w #0,leftclip
  2753.  move.w RIGHTX,rightclip
  2754.  move.w #0,deftopclip
  2755.  move.w WIDESCRN,d0
  2756.  add.w d0,deftopclip
  2757.  
  2758.  move.w BOTTOMY,defbotclip
  2759.  sub.w d0,defbotclip
  2760.  move.w #0,topclip
  2761.  add.w d0,topclip
  2762.  move.w BOTTOMY,botclip
  2763.  sub.w d0,botclip
  2764. ; sub.l #10*104*4,frompt
  2765. ; sub.l #10*104*4,midpt
  2766.  
  2767. * Subroom loop
  2768.  
  2769.  bsr DrawDisplay 
  2770.  
  2771.  bra nodrawp2
  2772.  
  2773. drawplayer2
  2774.  
  2775.  move.w #0,scaleval
  2776.  move.l PLR2_xoff,xoff
  2777.  move.l PLR2_yoff,yoff
  2778.  move.l PLR2_zoff,zoff
  2779.  move.w PLR2_angpos,angpos
  2780.  move.w PLR2_cosval,cosval
  2781.  move.w PLR2_sinval,sinval 
  2782.  
  2783.  
  2784.  
  2785.  move.l PLR2_ListOfGraphRooms,ListOfGraphRooms
  2786.  move.l PLR2_PointsToRotatePtr,PointsToRotatePtr
  2787.  move.b PLR2_Echo,PLREcho
  2788.  move.l PLR2_Roompt,Roompt
  2789.  
  2790.  move.l #KeyMap,a5
  2791.  moveq #0,d5
  2792.  move.b look_behind_key,d5
  2793.  tst.b (a5,d5.w)
  2794.  beq.s .nolookback
  2795.  
  2796.  move.l PLR1_Obj,a0
  2797.  move.w #-1,12+128(a0)
  2798.  eor.w #4096,angpos 
  2799.  
  2800.  neg.w cosval
  2801.  neg.w sinval
  2802. .nolookback:
  2803.  
  2804.  jsr OrderZones
  2805.  jsr objmoveanim
  2806.  jsr EnergyBar
  2807.  jsr AmmoBar
  2808.  
  2809.  move.w WIDESCRN,d0
  2810.  
  2811.  move.w #0,leftclip
  2812.  move.w RIGHTX,rightclip
  2813.  move.w #0,deftopclip
  2814.  add.w d0,deftopclip
  2815.  move.w BOTTOMY,defbotclip
  2816.  sub.w d0,defbotclip
  2817.  move.w #0,topclip
  2818.  add.w d0,topclip
  2819.  move.w BOTTOMY,botclip
  2820.  sub.w d0,botclip
  2821.  
  2822.  st DOANYWATER
  2823.  bsr DrawDisplay
  2824.  
  2825. nodrawp2:
  2826.  
  2827. ***************************************** 
  2828. * Copy from copbuff to chip ram
  2829.  
  2830.  
  2831. ; move.l drawpt,a3
  2832. ; adda.w #10,a3
  2833. ; move.l COPSCRNBUFF,a2
  2834. ; move.w #2,d6
  2835. ; adda.w #10,a2
  2836. ;COPYOUT
  2837. ; move.w #31,d0
  2838. ;COPYDOWN1:
  2839. ; move.w #3,d1
  2840. ; move.l a2,a4
  2841. ; move.l a3,a5
  2842. ;.inlop1:
  2843. ;val SET 0
  2844. ; REPT 20
  2845. ; move.w val(a4),val(a5)
  2846. ;val SET val+104*4
  2847. ; ENDR
  2848. ; adda.l #104*4*20,a4
  2849. ; adda.l #104*4*20,a5
  2850. ; dbra d1,.inlop1
  2851. ; addq #4,a2
  2852. ; addq #4,a3
  2853. ; dbra d0,COPYDOWN1
  2854. ; addq #4,a2
  2855. ; addq #4,a3
  2856. ; dbra d6,COPYOUT 
  2857.  
  2858.  tst.b REALMAPON
  2859.  beq.s .nomap
  2860.  bsr DoTheMapWotNastyCharlesIsForcingMeToDo
  2861. .nomap
  2862.  
  2863.  move.w WIDESCRN,d7
  2864.  
  2865.  tst.b FULLSCR
  2866.  beq nobigconv
  2867.  
  2868.  move.l FASTBUFFER,a0
  2869. ; add.l #320*2*20,a0
  2870.  move.w d7,d6
  2871.  muls #320,d6
  2872.  add.l d6,a0
  2873.  move.l SCRNDRAWPT,a1
  2874.  move.w d7,d6
  2875.  muls #40,d6
  2876.  add.l d6,a1
  2877.  add.l #2,a1
  2878.  move.l #(288/8)-1,d0
  2879.  move.l #231,d1
  2880.  sub.w d7,d1
  2881.  sub.w d7,d1
  2882.  blt nochunk
  2883.  move.w #(320-288),d2
  2884.  move.w #4,d3
  2885.  
  2886.  bra donebigconv
  2887.  
  2888. nobigconv:
  2889.  
  2890.  move.l FASTBUFFER,a0
  2891.  move.w d7,d6
  2892.  muls #320,d6
  2893.  add.l d6,a0
  2894.  move.l SCRNDRAWPT,a1
  2895.  add.l #8+40*20,a1
  2896.  move.w d7,d6
  2897.  muls #40,d6
  2898.  add.l d6,a1
  2899.  move.l #(192/8)-1,d0
  2900.  move.l #159,d1
  2901.  sub.w d7,d1
  2902.  sub.w d7,d1
  2903.  blt nochunk
  2904.  move.w #(320-192),d2
  2905.  move.w #16,d3
  2906. donebigconv
  2907.  
  2908.  tst.b DOUBLEHEIGHT
  2909.  beq.s .nodoub
  2910.  asr.w #1,d1
  2911.  blt nochunk
  2912.  add.w #320,d2
  2913.  add.w #40,d3
  2914. .nodoub:
  2915.  
  2916.  move.b DOUBLEWIDTH,d4
  2917.  
  2918.  move.b PLR1_TELEPORTED,d5
  2919.  clr.b PLR1_TELEPORTED
  2920.  cmp.b #'s',mors
  2921.  bne.s .notplr2
  2922.  move.b PLR2_TELEPORTED,d5
  2923.  clr.b PLR2_TELEPORTED
  2924. .notplr2
  2925.  jsr CHUNKYTOPLANAR 
  2926.  
  2927. nochunk:
  2928.  
  2929.  
  2930.  move.l #KeyMap,a5
  2931.  tst.b $4a(a5)
  2932.  beq .nosmallscr
  2933.  
  2934.  move.w #100,d2
  2935.  move.l #0,d7
  2936.  move.l #0,d6
  2937.  tst.b FULLSCR
  2938.  bne.s .attop
  2939.  move.l #40*20,d7
  2940.  move.l #40*52,d6
  2941.  move.w #60,d2
  2942. .attop:
  2943.  
  2944.  move.w WIDESCRN,d0
  2945.  move.l SCRNDRAWPT,a0
  2946.  add.l d7,a0
  2947.  muls #40,d0
  2948.  add.l d0,a0
  2949.  bsr CLRTWOLINES
  2950.  move.w WIDESCRN,d0
  2951.  move.l SCRNSHOWPT,a0
  2952.  add.l d7,a0
  2953.  muls #40,d0
  2954.  add.l d0,a0
  2955.  bsr CLRTWOLINES
  2956.  
  2957.  
  2958.  add.w #2,WIDESCRN
  2959.  
  2960.  cmp.w WIDESCRN,d2
  2961.  bgt.s .okwide
  2962.  move.w d2,WIDESCRN
  2963. .okwide:
  2964.  
  2965.  move.l SCRNDRAWPT,a0
  2966.  add.l #232*40,a0
  2967.  sub.l d6,a0
  2968.  move.w WIDESCRN,d0
  2969.  muls #40,d0
  2970.  sub.l d0,a0
  2971.  bsr CLRTWOLINES
  2972.  move.l SCRNSHOWPT,a0
  2973.  sub.l d6,a0
  2974.  add.l #232*40,a0
  2975.  move.w WIDESCRN,d0
  2976.  muls #40,d0
  2977.  sub.l d0,a0
  2978.  bsr CLRTWOLINES
  2979.  
  2980. .nosmallscr
  2981.  
  2982.  tst.b $5e(a5)
  2983.  beq.s .nobigscr
  2984.  tst.w WIDESCRN
  2985.  ble.s .nobigscr
  2986.  
  2987.  sub.w #2,WIDESCRN
  2988.  
  2989. .nobigscr
  2990.  
  2991.  
  2992. ; tst.b (a5)
  2993. ; beq.s .nosavescrn
  2994. ;
  2995. ; not.b USEDOUG
  2996. ;
  2997. ; jsr SAVETHESCREEN
  2998. ;
  2999. ;.nosavescrn:
  3000.  
  3001.  tst.b $5b(a5)
  3002.  beq notdoubheight
  3003.  tst.b LASTDH
  3004.  bne notdoubheight2
  3005.  move.l SCRNSHOWPT,a0
  3006.  jsr WIPEDISPLAY
  3007.  move.l SCRNDRAWPT,a0
  3008.  jsr WIPEDISPLAY
  3009.  st LASTDH 
  3010.  
  3011.  move.w #0,d0
  3012.  move.w #0,d1
  3013.  
  3014.  not.b DOUBLEHEIGHT
  3015.  beq.s singlepixheight
  3016.  move.w #-40,d0
  3017.  move.w #40,d1
  3018.  
  3019. singlepixheight:
  3020.  
  3021.  move.l #SCRMODULOS,a0
  3022.  move.w #115,d2
  3023. putinmode:
  3024.  move.w d0,6(a0)
  3025.  move.w d0,6+4(a0)
  3026.  move.w d1,6+16(a0)
  3027.  move.w d1,6+16+4(a0)
  3028.  add.w #32,a0
  3029.  dbra d2,putinmode
  3030.  
  3031.  bra notdoubheight2
  3032.  
  3033. notdoubheight:
  3034.  clr.b LASTDH
  3035. notdoubheight2
  3036.  
  3037.  tst.b $5a(a5)
  3038.  beq.s notdoubwidth
  3039.  tst.b LASTDW
  3040.  bne notdoubwidth2
  3041.  move.l SCRNSHOWPT,a0
  3042.  jsr WIPEDISPLAY
  3043.  move.l SCRNDRAWPT,a0
  3044.  jsr WIPEDISPLAY
  3045.  st LASTDW
  3046.  not.b DOUBLEWIDTH
  3047.  bra.s notdoubwidth2
  3048.  
  3049. notdoubwidth:
  3050.  clr.b LASTDW
  3051. notdoubwidth2:
  3052.  
  3053. ***************************************** 
  3054.  move.l PLR2_Roompt,a0
  3055.  move.l #WorkSpace,a1
  3056.  clr.l (a1)
  3057.  clr.l 4(a1)
  3058.  clr.l 8(a1)
  3059.  clr.l 12(a1)
  3060.  clr.l 16(a1)
  3061.  clr.l 20(a1)
  3062.  clr.l 24(a1)
  3063.  clr.l 28(a1)
  3064.  
  3065.  cmp.b #'n',mors
  3066.  beq.s plr1only
  3067.  
  3068.  lea ToListOfGraph(a0),a0
  3069. .doallrooms:
  3070.  move.w (a0),d0
  3071.  blt.s .allroomsdone
  3072.  addq #8,a0
  3073.  move.w d0,d1
  3074.  asr.w #3,d0
  3075.  bset d1,(a1,d0.w)
  3076.  bra .doallrooms
  3077. .allroomsdone:
  3078.  
  3079. plr1only:
  3080.  
  3081.  move.l PLR1_Roompt,a0
  3082.  lea ToListOfGraph(a0),a0
  3083. .doallrooms2:
  3084.  move.w (a0),d0
  3085.  blt.s .allroomsdone2
  3086.  addq #8,a0
  3087.  move.w d0,d1
  3088.  asr.w #3,d0
  3089.  bset d1,(a1,d0.w)
  3090.  bra .doallrooms2
  3091. .allroomsdone2:
  3092.  
  3093.  move.l #%000001,d7
  3094.  lea TEAMWORK,a2
  3095.  move.l ObjectData,a0
  3096.  sub.w #64,a0
  3097. .doallobs:
  3098.  add.w #64,a0
  3099.  move.w (a0),d0
  3100.  blt.s .allobsdone
  3101.  move.w 12(a0),d0
  3102.  blt.s .doallobs
  3103.  move.w d0,d1
  3104.  asr.w #3,d0
  3105.  btst d1,(a1,d0.w)
  3106.  bne.s .worryobj
  3107.  move.b 16(a0),d0
  3108.  btst d0,d7
  3109.  beq.s .doallobs
  3110.  moveq #0,d0
  3111.  move.b teamnumber(a0),d0
  3112.  blt.s .doallobs
  3113.  asl.w #4,d0
  3114.  tst.w SEENBY(a2,d0.w)
  3115.  blt.s .doallobs
  3116. .worryobj:
  3117.  or.b #127,worry(a0)
  3118.  bra.s .doallobs
  3119. .allobsdone:
  3120.  
  3121.  
  3122.  
  3123. ; move.l #brightentab,a0
  3124. ; move.l frompt,a3
  3125. ; adda.w #(4*33)+(104*4*20),a3
  3126. ; move.w #20,d7
  3127. ; move.w #20,d6
  3128. ;horl:
  3129. ; move.w d6,d5
  3130. ; move.l a3,a1
  3131. ;vertl
  3132. ; move.w (a1),d0
  3133. ; move.w (a0,d0.w*2),(a1)
  3134. ; addq #4,a1
  3135. ; dbra d5,vertl
  3136. ; adda.w #104*4,a3
  3137. ; dbra d7,horl
  3138.  
  3139.  move.l #$dff000,a6
  3140.  
  3141. ; move.w #$300,col0(a6)
  3142.  
  3143.  move.l #KeyMap,a5
  3144.  tst.b $45(a5)
  3145.  beq.s noend
  3146.  
  3147.  cmp.b #'s',mors
  3148.  beq plr2quit 
  3149.  
  3150.  st MASTERQUITTING
  3151.  bra noend
  3152.  
  3153. plr2quit:
  3154.  st SLAVEQUITTING
  3155. noend:
  3156.  
  3157.  tst.b MASTERQUITTING
  3158.  beq.s .noquit
  3159.  tst.b SLAVEQUITTING
  3160.  beq.s .noquit
  3161.  jmp endnomusic
  3162. .noquit
  3163.  
  3164.  cmp.b #'n',mors
  3165.  bne.s noexit
  3166.  move.l PLR1_Roompt,a0
  3167.  move.w (a0),d0
  3168. ; move.w PLOPT,d1
  3169. ; move.l #ENDZONES,a0
  3170. ; cmp.w (a0,d1.w*2),d0
  3171.  
  3172.  cmp.w ENDZONE,d0
  3173.  
  3174. ; change this for quick exit, charlie
  3175. zzzz:
  3176. ; bra end
  3177.  
  3178.  bne.s noexit
  3179.  add.w #2,TELVAL
  3180.  cmp.w #9,TELVAL
  3181.  blt noexit
  3182.  
  3183.  jmp end
  3184. noexit:
  3185.  
  3186. ; tst.w PLAYERONEHEALTH
  3187. ; bgt nnoend1
  3188. ; jmp end
  3189. ;nnoend1:
  3190. ; tst.w PLAYERTWOHEALTH
  3191. ; bgt nnoend2
  3192. ; jmp end
  3193. ;nnoend2:
  3194.  
  3195. ; move.l SwitchData,a0
  3196. ; tst.b 24+8(a0)
  3197. ; bne end
  3198.   
  3199. ; JSR STOPTIMER
  3200.  
  3201.  
  3202.  bra lop
  3203.  
  3204.  
  3205.  
  3206. ; include "ab3:demo/system/keyboard.s"
  3207.  include "ab3:source_4000/ab3diipatchidr.s"
  3208.  
  3209. CLRTWOLINES:
  3210.  
  3211.  move.l d2,-(a7)
  3212.  
  3213.  moveq #0,d1
  3214.  move.w #7,d2
  3215. .ccc
  3216.  move.l d1,2(a0)
  3217.  move.l d1,6(a0)
  3218.  move.l d1,10(a0)
  3219.  move.l d1,14(a0)
  3220.  move.l d1,18(a0)
  3221.  move.l d1,22(a0)
  3222.  move.l d1,26(a0)
  3223.  move.l d1,30(a0)
  3224.  move.l d1,34(a0)
  3225.  move.l d1,2+40(a0)
  3226.  move.l d1,6+40(a0)
  3227.  move.l d1,10+40(a0)
  3228.  move.l d1,14+40(a0)
  3229.  move.l d1,18+40(a0)
  3230.  move.l d1,22+40(a0)
  3231.  move.l d1,26+40(a0)
  3232.  move.l d1,30+40(a0)
  3233.  move.l d1,34+40(a0)
  3234.  add.l #10240,a0
  3235.  dbra d2,.ccc
  3236.  move.l (a7)+,d2
  3237.  rts
  3238.  
  3239.  
  3240. LASTDH: dc.b 0
  3241. LASTDW: dc.b 0
  3242. WIDESCRN: dc.w 0
  3243. TRRANS: dc.w 0
  3244. DOANYWATER: dc.w 0
  3245.  
  3246. DoTheMapWotNastyCharlesIsForcingMeToDo:
  3247.  
  3248.  move.l TexturePal,a4
  3249.  add.l #256*32,a4
  3250. ; add.w MAPBRIGHT,a4
  3251.  
  3252.  move.l #KeyMap,a5
  3253.  tst.b $50(a5)
  3254.  beq.s .nobrighter
  3255.  tst.w MAPBRIGHT
  3256.  beq.s .nobrighter
  3257.  
  3258.  sub.w #1,MAPBRIGHT
  3259.  
  3260. .nobrighter:
  3261.  
  3262.  tst.b $51(a5)
  3263.  beq.s .nodimmer
  3264.  cmp.w #7,MAPBRIGHT
  3265.  bge.s .nodimmer
  3266.  
  3267.  add.w #1,MAPBRIGHT
  3268.  
  3269. .nodimmer:
  3270.  
  3271.  move.l #Rotated,a1
  3272.  move.l #COMPACTMAP,a2
  3273.  move.l #BIGMAP-40,a3
  3274.  
  3275. preshow:
  3276.  add.w #40,a3
  3277.  
  3278. SHOWMAP:
  3279.  move.l (a2)+,d5
  3280.  move.l a2,d7
  3281.  cmp.l LASTZONE,d7
  3282.  bgt shownmap
  3283.  
  3284.  tst.l d5
  3285.  beq.s preshow
  3286.  
  3287.  move.w #9,d7
  3288. wallsofzone
  3289.  
  3290.  asr.l #1,d5
  3291.  bcs.s WALLSEEN
  3292.  
  3293.  asr.l #1,d5
  3294.  bcs.s WALLMAPPED
  3295.  
  3296.  asr.l #1,d5
  3297.  addq #4,a3
  3298.  bra.s DECIDEDWALL
  3299.  
  3300. WALLMAPPED:
  3301.  move.w #$b00,d4
  3302.  asr.l #1,d5
  3303.  bcc.s .notadoor
  3304.  move.w #$e00,d4
  3305. .notadoor
  3306.  
  3307.  st TRRANS
  3308.  
  3309.  bra.s DECIDEDCOLOUR
  3310.  
  3311. WALLSEEN:
  3312.  
  3313.  clr.b TRRANS
  3314.  
  3315.  move.w #255,d4
  3316.  asr.l #2,d5
  3317.  bcc.s .notadoor
  3318.  move.w #254,d4
  3319. .notadoor
  3320. DECIDEDCOLOUR:
  3321.  move.w (a3)+,d6
  3322.  move.l (a1,d6.w*8),d0
  3323.  asr.l #7,d0
  3324.  movem.l d7/d5,-(a7)
  3325.  move.w mapxoff,d5
  3326.  ext.l d5
  3327.  add.l d5,d0
  3328.  move.l 4(a1,d6.w*8),d1
  3329.  move.w mapzoff,d5
  3330.  ext.l d5
  3331.  add.l d5,d1
  3332.  move.w (a3)+,d6
  3333.  move.l (a1,d6.w*8),d2
  3334.  move.w mapxoff,d5
  3335.  ext.l d5
  3336.  asr.l #7,d2
  3337.  add.l d5,d2
  3338.  move.l 4(a1,d6.w*8),d3
  3339.  move.w mapzoff,d5
  3340.  ext.l d5
  3341.  add.l d5,d3
  3342.  
  3343.  neg.l d1
  3344.  neg.l d3
  3345.  
  3346.  bsr CLIPANDDRAW
  3347.  movem.l (a7)+,d7/d5
  3348.  
  3349. DECIDEDWALL:
  3350.  
  3351.  dbra d7,wallsofzone
  3352.  bra SHOWMAP
  3353.  
  3354. shownmap:
  3355.  
  3356.  clr.b TRRANS
  3357.  
  3358.  move.w mapxoff,d0
  3359.  ext.l d0
  3360.  move.w mapzoff,d1
  3361.  ext.l d1
  3362.  neg.l d1
  3363.  move.l d0,d2
  3364.  move.l d1,d3
  3365.  sub.l #128,d1
  3366.  add.l #128,d3
  3367.  move.w #250,d4
  3368.  bsr CLIPANDDRAW
  3369.  
  3370.  move.w mapxoff,d0
  3371.  ext.l d0
  3372.  move.w mapzoff,d1
  3373.  ext.l d1
  3374.  neg.l d1
  3375.  move.l d0,d2
  3376.  move.l d1,d3
  3377.  sub.l #128,d1
  3378.  sub.l #32,d3
  3379.  sub.l #64,d2
  3380.  move.w #250,d4
  3381.  bsr CLIPANDDRAW
  3382.  
  3383.  move.w mapxoff,d0
  3384.  ext.l d0
  3385.  move.w mapzoff,d1
  3386.  ext.l d1
  3387.  neg.l d1
  3388.  move.l d0,d2
  3389.  move.l d1,d3
  3390.  sub.l #128,d1
  3391.  sub.l #32,d3
  3392.  add.l #64,d2
  3393.  move.w #250,d4
  3394.  bsr CLIPANDDRAW
  3395.  rts
  3396.  
  3397.  
  3398. CLIPANDDRAW:
  3399.  
  3400.  tst.b FULLSCR
  3401.  beq.s .nodov
  3402.  
  3403.  add.l d0,d0
  3404.  add.l d2,d2
  3405.  ext.l d0
  3406.  ext.l d2
  3407.  divs.l #3,d0
  3408.  divs.l #3,d2
  3409.  
  3410. .nodov:
  3411.  
  3412.  move.w MAPBRIGHT,d5
  3413.  
  3414.  asr.l d5,d0
  3415.  asr.l d5,d1
  3416.  asr.l d5,d2
  3417.  asr.l d5,d3
  3418.  
  3419. NOSCALING:
  3420.  add.l #96,d0
  3421.  bge p1xpos
  3422.  
  3423.  add.l #96,d2
  3424.  blt OFFSCREEN
  3425.  
  3426. x1nx2p:
  3427.  
  3428.  move.l d3,d5
  3429.  sub.l d1,d5
  3430.  move.l d2,d6
  3431.  sub.l d0,d6
  3432.  beq OFFSCREEN
  3433.  
  3434.  muls.l d0,d5
  3435.  divs.l d6,d5
  3436.  sub.l d5,d1
  3437.  move.l #0,d0
  3438.  
  3439.  bra doneleftclip
  3440.  
  3441. p1xpos:
  3442.  
  3443.  add.l #96,d2
  3444.  bge doneleftclip
  3445.  
  3446.  move.l d1,d5
  3447.  sub.l d3,d5
  3448.  move.l d0,d6
  3449.  sub.l d2,d6
  3450.  beq OFFSCREEN
  3451.  
  3452.  muls.l d2,d5
  3453.  divs.l d6,d5
  3454.  sub.l d5,d3
  3455.  move.l #0,d2
  3456.  
  3457. doneleftclip:
  3458.  
  3459.  cmp.l #191,d0
  3460.  ble p1xneg
  3461.  
  3462.  cmp.l #191,d2
  3463.  bgt OFFSCREEN
  3464.  
  3465.  move.l d0,d6
  3466.  sub.l d2,d6
  3467.  beq OFFSCREEN
  3468.  sub.l #191,d0
  3469.  move.l d3,d5
  3470.  sub.l d1,d5
  3471.  
  3472.  muls.l d5,d0
  3473.  divs.l d6,d0
  3474.  add.l d0,d1
  3475.  move.l #191,d0
  3476.  
  3477.  bra donerightclip
  3478.  
  3479. p1xneg:
  3480.  
  3481.  cmp.l #191,d2
  3482.  ble donerightclip
  3483.  
  3484.  move.l d2,d6
  3485.  sub.l d0,d6
  3486.  beq OFFSCREEN
  3487.  sub.l #191,d2
  3488.  move.l d1,d5
  3489.  sub.l d3,d5
  3490.  
  3491.  muls.l d5,d2
  3492.  divs.l d6,d2
  3493.  add.l d2,d3
  3494.  move.l #191,d2
  3495.  
  3496. donerightclip:
  3497.  
  3498. *********************************
  3499.  
  3500.  add.l #80,d1
  3501.  bge p1ypos
  3502.  
  3503.  add.l #80,d3
  3504.  blt OFFSCREEN
  3505.  
  3506.  move.l d2,d5
  3507.  sub.l d0,d5
  3508.  move.l d3,d6
  3509.  sub.l d1,d6
  3510.  beq OFFSCREEN
  3511.  
  3512.  muls.l d1,d5
  3513.  divs.l d6,d5
  3514.  sub.l d5,d0
  3515.  move.l #0,d1
  3516.  
  3517.  bra donetopclip
  3518.  
  3519. p1ypos:
  3520.  
  3521.  add.l #80,d3
  3522.  bge donetopclip
  3523.  
  3524.  move.l d0,d5
  3525.  sub.l d2,d5
  3526.  move.l d1,d6
  3527.  sub.l d3,d6
  3528.  beq OFFSCREEN
  3529.  
  3530.  muls.l d3,d5
  3531.  divs.l d6,d5
  3532.  sub.l d5,d2
  3533.  move.l #0,d3
  3534.  
  3535. donetopclip:
  3536.  
  3537.  cmp.l #159,d1
  3538.  ble p1yneg
  3539.  
  3540.  cmp.l #159,d3
  3541.  bgt OFFSCREEN
  3542.  
  3543.  move.l d1,d6
  3544.  sub.l d3,d6
  3545.  beq OFFSCREEN
  3546.  sub.l #159,d1
  3547.  move.l d2,d5
  3548.  sub.l d0,d5
  3549.  
  3550.  muls.l d5,d1
  3551.  divs.l d6,d1
  3552.  add.l d1,d0
  3553.  move.l #159,d1
  3554.  
  3555.  bra donebotclip
  3556.  
  3557. p1yneg:
  3558.  
  3559.  cmp.l #159,d3
  3560.  ble donebotclip
  3561.  
  3562.  move.l d3,d6
  3563.  sub.l d1,d6
  3564.  beq OFFSCREEN
  3565.  sub.l #159,d3
  3566.  move.l d0,d5
  3567.  sub.l d2,d5
  3568.  
  3569.  muls.l d5,d3
  3570.  divs.l d6,d3
  3571.  add.l d3,d2
  3572.  move.l #159,d3
  3573.  
  3574. donebotclip:
  3575.  
  3576.  tst.b TRRANS
  3577.  bne DRAWAtransLINE
  3578.  bra DRAWAMAPLINE
  3579.  
  3580. OFFSCREEN:
  3581. NOLINEtrans:
  3582.  rts
  3583.  
  3584. MAPBRIGHT:
  3585.  dc.w 3
  3586. mapxoff: dc.w 0
  3587. mapzoff: dc.w 0
  3588.  
  3589. DRAWAtransLINE:
  3590.  
  3591.  move.l FASTBUFFER,a0    ; screen to render to.
  3592.  
  3593.  tst.b FULLSCR
  3594.  beq.s .nooffset
  3595.   
  3596.  add.l #(320*40)+(48*2),a0
  3597.   
  3598. .nooffset:
  3599.  
  3600.  cmp.w d1,d3
  3601.  bgt.s .okdown
  3602.  bne.s .aline
  3603.  cmp.w d0,d2
  3604.  beq.s NOLINEtrans 
  3605. .aline
  3606.  exg d0,d2
  3607.  exg d1,d3
  3608. .okdown
  3609.  
  3610.  move.w d1,d5
  3611.  muls #320,d5
  3612.  add.l d5,a0
  3613.  lea (a0,d0.w*2),a0
  3614.  
  3615.  sub.w d1,d3
  3616.  
  3617.  sub.w d0,d2
  3618.  bge.s downrighttrans
  3619.  
  3620. downlefttrans:
  3621.  neg.w d2
  3622.  cmp.w d2,d3
  3623.  bgt.s downmorelefttrans
  3624.  
  3625. downleftmoretrans:
  3626.  move.w #320,d6
  3627.  move.w d2,d0
  3628.  move.w d2,d7
  3629.  
  3630. .linelop:
  3631.  move.b (a0),d4
  3632.  move.b (a4,d4.w*2),(a0)
  3633.  subq #1,a0
  3634.  sub.w d3,d0
  3635.  bgt.s .noextra
  3636.  add.w d2,d0
  3637.  add.w d6,a0
  3638. .noextra:
  3639.  dbra d7,.linelop
  3640.  rts
  3641.  
  3642. downmorelefttrans:
  3643.  move.w #320,d6
  3644.  move.w d3,d0
  3645.  move.w d3,d7
  3646.  
  3647. .linelop:
  3648.  move.b (a0),d4
  3649.  move.b (a4,d4.w*2),(a0)
  3650.  add.w d6,a0
  3651.  sub.w d2,d0
  3652.  bgt.s .noextra
  3653.  add.w d3,d0
  3654.  subq #1,a0
  3655. .noextra:
  3656.  dbra d7,.linelop
  3657.  
  3658.  rts
  3659.  
  3660. downrighttrans:
  3661.  
  3662.  cmp.w d2,d3
  3663.  bgt.s downmorerighttrans
  3664.  
  3665. downrightmoretrans:
  3666.  move.w #320,d6
  3667.  move.w d2,d0
  3668.  move.w d2,d7
  3669.  
  3670. .linelop:
  3671.  move.b (a0),d4
  3672.  move.b (a4,d4.w*2),(a0)+
  3673.  sub.w d3,d0
  3674.  bgt.s .noextra
  3675.  add.w d2,d0
  3676.  add.w d6,a0
  3677. .noextra:
  3678.  dbra d7,.linelop
  3679.  
  3680.  rts
  3681.  
  3682. downmorerighttrans:
  3683.  move.w #320,d6
  3684.  move.w d3,d0
  3685.  move.w d3,d7
  3686.  
  3687. .linelop:
  3688.  move.b (a0),d4
  3689.  move.b (a4,d4.w*2),(a0)
  3690.  add.w d6,a0
  3691.  sub.w d2,d0
  3692.  bgt.s .noextra
  3693.  add.w d3,d0
  3694.  addq #1,a0
  3695. .noextra:
  3696.  dbra d7,.linelop
  3697.  
  3698.  rts
  3699.  
  3700. NOLINE:
  3701.  rts
  3702.  
  3703. DRAWAMAPLINE:
  3704.  
  3705.  
  3706.  move.b DOUBLEHEIGHT,d5
  3707.  or.b DOUBLEWIDTH,d5
  3708.  tst.b d5
  3709.  bne DOITFAT
  3710.  
  3711.  move.l FASTBUFFER,a0    ; screen to render to.
  3712.  cmp.w d1,d3
  3713.  bgt.s .okdown
  3714.  bne.s .aline
  3715.  cmp.w d0,d2
  3716.  beq.s NOLINE 
  3717. .aline
  3718.  exg d0,d2
  3719.  exg d1,d3
  3720. .okdown
  3721.  
  3722.  move.w d1,d5
  3723.  muls #320,d5
  3724.  add.l d5,a0
  3725.  lea (a0,d0.w),a0
  3726.  
  3727.  sub.w d1,d3
  3728.  
  3729.  sub.w d0,d2
  3730.  bge.s downright
  3731.  
  3732. downleft:
  3733.  neg.w d2
  3734.  cmp.w d2,d3
  3735.  bgt.s downmoreleft
  3736.  
  3737. downleftmore:
  3738.  move.w #320,d6
  3739.  move.w d2,d0
  3740.  move.w d2,d7
  3741.  addq #1,a0
  3742.  
  3743. .linelop
  3744.  move.b d4,-(a0)
  3745.  sub.w d3,d0
  3746.  bgt.s .noextra
  3747.  add.w d2,d0
  3748.  add.w d6,a0
  3749. .noextra:
  3750.  dbra d7,.linelop
  3751.  rts
  3752.  
  3753. downmoreleft:
  3754.  move.w #320,d6
  3755.  move.w d3,d0
  3756.  move.w d3,d7
  3757.  
  3758. .linelop:
  3759.  move.b d4,(a0)
  3760.  add.w d6,a0
  3761.  sub.w d2,d0
  3762.  bgt.s .noextra
  3763.  add.w d3,d0
  3764.  subq #1,a0
  3765. .noextra:
  3766.  dbra d7,.linelop
  3767.  
  3768.  rts
  3769.  
  3770. downright:
  3771.  
  3772.  cmp.w d2,d3
  3773.  bgt.s downmoreright
  3774.  
  3775. downrightmore:
  3776.  move.w #320,d6
  3777.  move.w d2,d0
  3778.  move.w d2,d7
  3779.  
  3780. .linelop:
  3781.  move.b d4,(a0)+
  3782.  sub.w d3,d0
  3783.  bgt.s .noextra
  3784.  add.w d2,d0
  3785.  add.w d6,a0
  3786. .noextra:
  3787.  dbra d7,.linelop
  3788.  
  3789.  rts
  3790.  
  3791. downmoreright:
  3792.  move.w #320,d6
  3793.  move.w d3,d0
  3794.  move.w d3,d7
  3795.  
  3796. .linelop:
  3797.  move.b d4,(a0)
  3798.  add.w d6,a0
  3799.  sub.w d2,d0
  3800.  bgt.s .noextra
  3801.  add.w d3,d0
  3802.  addq #1,a0
  3803. .noextra:
  3804.  dbra d7,.linelop
  3805.  
  3806.  rts
  3807.  
  3808.  
  3809. DOITFAT:
  3810.  move.l FASTBUFFER,a0    ; screen to render to.
  3811.  cmp.w d1,d3
  3812.  bgt.s .okdown
  3813.  bne.s .aline
  3814.  cmp.w d0,d2
  3815.  beq NOLINE 
  3816. .aline
  3817.  exg d0,d2
  3818.  exg d1,d3
  3819. .okdown
  3820.  
  3821.  move.w d1,d5
  3822.  muls #320,d5
  3823.  add.l d5,a0
  3824.  lea (a0,d0.w),a0
  3825.  
  3826.  sub.w d1,d3
  3827.  
  3828.  sub.w d0,d2
  3829.  bge.s downrightFAT
  3830.  
  3831. downleftFAT:
  3832.  neg.w d2
  3833.  cmp.w d2,d3
  3834.  bgt.s downmoreleftFAT
  3835.  
  3836. downleftmoreFAT:
  3837.  move.w #320,d6
  3838.  move.w d2,d0
  3839.  move.w d2,d7
  3840.  addq #1,a0
  3841.  
  3842. .linelop
  3843.  move.b d4,319(a0)
  3844.  move.b d4,(a0)
  3845.  move.b d4,-(a0)
  3846.  sub.w d3,d0
  3847.  bgt.s .noextra
  3848.  add.w d2,d0
  3849.  add.w d6,a0
  3850. .noextra:
  3851.  dbra d7,.linelop
  3852.  rts
  3853.  
  3854. downmoreleftFAT:
  3855.  move.w #320,d6
  3856.  move.w d3,d0
  3857.  move.w d3,d7
  3858.  
  3859. .linelop:
  3860.  move.b d4,320(a0)
  3861.  move.b d4,1(a0)
  3862.  move.b d4,(a0)
  3863.  add.w d6,a0
  3864.  sub.w d2,d0
  3865.  bgt.s .noextra
  3866.  add.w d3,d0
  3867.  subq #1,a0
  3868. .noextra:
  3869.  dbra d7,.linelop
  3870.  
  3871.  rts
  3872.  
  3873. downrightFAT:
  3874.  
  3875.  cmp.w d2,d3
  3876.  bgt.s downmorerightFAT
  3877.  
  3878. downrightmoreFAT:
  3879.  move.w #320,d6
  3880.  move.w d2,d0
  3881.  move.w d2,d7
  3882.  
  3883. .linelop:
  3884.  move.b d4,320(a0)
  3885.  move.b d4,(a0)+
  3886.  move.b d4,(a0)
  3887.  sub.w d3,d0
  3888.  bgt.s .noextra
  3889.  add.w d2,d0
  3890.  add.w d6,a0
  3891. .noextra:
  3892.  dbra d7,.linelop
  3893.  
  3894.  rts
  3895.  
  3896. downmorerightFAT:
  3897.  move.w #320,d6
  3898.  move.w d3,d0
  3899.  move.w d3,d7
  3900.  
  3901. .linelop:
  3902.  move.b d4,320(a0)
  3903.  move.b d4,1(a0)
  3904.  move.b d4,(a0)
  3905.  add.w d6,a0
  3906.  sub.w d2,d0
  3907.  bgt.s .noextra
  3908.  add.w d3,d0
  3909.  addq #1,a0
  3910. .noextra:
  3911.  dbra d7,.linelop
  3912.  
  3913.  rts
  3914.  
  3915.  
  3916. SAVETHESCREEN:
  3917.  
  3918.  move.l old,$dff080
  3919.  move.w #$8020,$dff000+intena
  3920.  
  3921.  move.l _IntuitionBase,a6
  3922.  jsr _LVORethinkDisplay(a6)
  3923.  
  3924.  move.l doslib,a6
  3925.  move.l #SAVENAME,d1
  3926.  move.l #1006,d2
  3927.  jsr -30(a6)
  3928.  move.l d0,handle
  3929.  
  3930.  move.l doslib,a6
  3931.  move.l SCRNDRAWPT,d2
  3932.  move.l handle,d1
  3933.  move.l #10240*8,d3
  3934.  jsr _LVOWrite(a6)
  3935.  
  3936.  move.l doslib,a6
  3937.  move.l handle,d1
  3938.  jsr -36(a6)
  3939.  
  3940.  move.l doslib,a6
  3941.  move.l #200,d1
  3942.  jsr -198(a6) 
  3943.  
  3944.  move.w #$0020,$dff000+intena
  3945.  move.l #bigfield,$dff080
  3946.  
  3947.  add.b #1,SAVELETTER
  3948.  
  3949.  rts
  3950.  
  3951. SAVENAME: dc.b 'work:rawscrn'
  3952. SAVELETTER: dc.b 'd',0
  3953.  
  3954.  even
  3955.  
  3956.  include "ab3:source_4000/CHUNKY.s"
  3957.  
  3958.  
  3959. MASTERQUITTING: dc.b 0
  3960. SLAVEQUITTING: dc.b 0
  3961. MASTERPAUSE: dc.b 0
  3962. SLAVEPAUSE: dc.b 0
  3963.  
  3964. PAUSEOPTS:
  3965.  include "ab3:source_4000/pauseopts"
  3966.  
  3967. ENDZONE: dc.w 0
  3968.  
  3969. ENDZONES:
  3970. ; LEVEL 1
  3971.  dc.w -1
  3972. ; dc.w 55
  3973. ; LEVEL 2
  3974.  dc.w 149
  3975. ; LEVEL 3
  3976.  dc.w 155
  3977. ; LEVEL 4
  3978.  dc.w 107
  3979. ; LEVEL 5
  3980.  dc.w 67
  3981. ; LEVEL 6
  3982.  dc.w 132
  3983. ; LEVEL 7
  3984.  dc.w 203
  3985. ; LEVEL 8
  3986.  dc.w 166
  3987. ; LEVEL 9
  3988.  dc.w 118
  3989. ; LEVEL 10
  3990.  dc.w 102
  3991. ; LEVEL 11
  3992.  dc.w 103
  3993. ; LEVEL 12
  3994.  dc.w 2
  3995. ; LEVEL 13
  3996.  dc.w 98
  3997. ; LEVEL 14
  3998.  dc.w 0
  3999. ; LEVEL 15
  4000.  dc.w 148
  4001. ; LEVEL 16
  4002.  dc.w 103
  4003.  
  4004. ***************************************************************************
  4005. ***************************************************************************
  4006. ****************** End of Main Loop here ********************************** 
  4007. ***************************************************************************
  4008. ***************************************************************************
  4009.  
  4010. putinsmallscr:
  4011.  
  4012.  rts
  4013.  
  4014.  move.l #$1fe0000,statskip
  4015.  move.l #$1fe0000,statskip+4
  4016.  
  4017.  move.l #healthpal,a5
  4018. ; move.l COPSCRN1,a0
  4019. ; move.l COPSCRN2,a2
  4020.  move.w #scrheight-1,d0
  4021.  move.l #0,d6
  4022.  move.w #0,d3
  4023.  move.w #$2bdf,startwait
  4024.  move.w #$2d01,endwait
  4025. .fillcop
  4026.  move.w #$180,d1
  4027.  
  4028.  move.l a0,a1
  4029.  move.l a2,a3
  4030.  move.w #$10c,(a1)+
  4031.  move.w #$10c,(a3)+
  4032.  move.w d3,(a1)+
  4033.  move.w d3,(a3)+
  4034.  eor.w #$8000,d3
  4035.  
  4036.  move.w #$106,(a1)+
  4037.  move.w #$106,(a3)+
  4038.  move.w #$2c42,d5
  4039.  or.w d3,d5
  4040.  and.w #$fffe,d5
  4041.  move.w d5,(a1)+
  4042.  move.w d5,(a3)+
  4043.  bsr do32
  4044.  
  4045.  move.w #$106,(a1)+
  4046.  move.w #$106,(a3)+
  4047.  move.w #$4c42,d5
  4048.  or.w d3,d5
  4049.  and.w #$fffe,d5
  4050.  move.w d5,(a1)+
  4051.  move.w d5,(a3)+
  4052.  bsr do32
  4053.  
  4054.  move.w #$106,(a1)+
  4055.  move.w #$106,(a3)+
  4056.  move.w #$6c42,d5
  4057.  or.w d3,d5
  4058.  and.w #$fffe,d5
  4059.  move.w d5,(a1)+
  4060.  move.w d5,(a3)+
  4061.  bsr do32
  4062.  
  4063.  
  4064.  move.l #$1060c42,(a1)+
  4065.  move.l #$1060c42,(a3)+
  4066.  move.w #$19e,(a1)+
  4067.  move.w (a5),(a1)+
  4068.  move.w #$19e,(a3)+
  4069.  move.w (a5)+,(a3)+
  4070.  
  4071. **********************************
  4072.  
  4073.  adda.w #104*4,a0
  4074.  adda.w #104*4,a2
  4075.  dbra d0,.fillcop
  4076.  
  4077.  move.w #$48,fetchstart
  4078.  move.w #$88,fetchstop
  4079.  move.w #$2cb1,winstart
  4080.  move.w #$2c91,winstop
  4081.  move.w #-24,modulo
  4082.  move.w #-24,modulo+4
  4083.  
  4084.  move.l #nullspr,d0
  4085.  move.w d0,s4l
  4086.  move.w d0,s5l
  4087.  move.w d0,s6l
  4088.  move.w d0,s7l
  4089.  swap d0
  4090.  move.w d0,s4h
  4091.  move.w d0,s5h
  4092.  move.w d0,s6h
  4093.  move.w d0,s7h 
  4094.  
  4095. ; move.l #borders,d0
  4096. ; move.w d0,s0l
  4097. ; swap d0
  4098. ; move.w d0,s0h
  4099. ; move.l #borders+2592,d0
  4100. ; move.w d0,s1l
  4101. ; swap d0
  4102. ; move.w d0,s1h
  4103. ; move.l #borders+2592*2,d0
  4104. ; move.w d0,s2l
  4105. ; swap d0
  4106. ; move.w d0,s2h
  4107. ; move.l #borders+2592*3,d0
  4108. ; move.w d0,s3l
  4109. ; swap d0
  4110. ; move.w d0,s3h
  4111.  
  4112.  
  4113.  move.l scrn,a0
  4114.  add.l #40,a0
  4115.  move.l scrn,a1
  4116.  add.l #160,a1
  4117.  move.l scrn,a2
  4118.  add.l #280,a2
  4119.  move.l #smallscrntab,a3
  4120.  move.w #191,d7    ; counter
  4121.  move.w #0,d1    ; xpos
  4122. .plotscrnloop:
  4123.  move.b (a3)+,d0
  4124.  move.w d1,d2
  4125.  asr.w #3,d2
  4126.  move.b d1,d3
  4127.  not.b d3
  4128.  bclr.b d3,-40(a0,d2.w)
  4129.  bclr.b d3,(a0,d2.w)
  4130.  bclr.b d3,40(a0,d2.w)
  4131.  bclr.b d3,-40(a1,d2.w)
  4132.  bclr.b d3,(a1,d2.w)
  4133.  bclr.b d3,40(a1,d2.w)
  4134.  bclr.b d3,-40(a2,d2.w)
  4135.  btst #0,d0
  4136.  beq.s .nobp1
  4137.  bset.b d3,-40(a0,d2.w)
  4138. .nobp1:
  4139.  btst #1,d0
  4140.  beq.s .nobp2
  4141.  bset.b d3,(a0,d2.w)
  4142. .nobp2:
  4143.  btst #2,d0
  4144.  beq.s .nobp3
  4145.  bset.b d3,40(a0,d2.w)
  4146. .nobp3:
  4147.  btst #3,d0
  4148.  beq.s .nobp4
  4149.  bset.b d3,-40(a1,d2.w)
  4150. .nobp4:
  4151.  btst #4,d0
  4152.  beq.s .nobp5
  4153.  bset.b d3,(a1,d2.w)
  4154. .nobp5:
  4155.  btst #5,d0
  4156.  beq.s .nobp6
  4157.  bset.b d3,40(a1,d2.w)
  4158. .nobp6:
  4159.  btst #6,d0
  4160.  beq.s .nobp7
  4161.  bset.b d3,-40(a2,d2.w)
  4162. .nobp7:
  4163.  
  4164.  addq #1,d1
  4165.  
  4166.  dbra d7,.plotscrnloop
  4167.  
  4168.  
  4169.  rts
  4170.  
  4171. putinlargescr:
  4172.  
  4173.  move.l #$1000000,statskip
  4174.  move.l #$fffffffe,statskip+4
  4175.  
  4176.  move.l #healthpal,a5
  4177. ; move.l COPSCRN1,a0
  4178. ; move.l COPSCRN2,a2
  4179.  move.w #scrheight-1,d0
  4180.  move.l #0,d6
  4181.  move.w #0,d3
  4182.  move.w #$29df,startwait
  4183.  move.w #$2b01,endwait
  4184. .fillcop
  4185.  move.w #$180,d1
  4186.  
  4187.  move.l a0,a1
  4188.  move.l a2,a3
  4189.  move.w #$10c,(a1)+
  4190.  move.w #$10c,(a3)+
  4191.  move.w d3,(a1)+
  4192.  move.w d3,(a3)+
  4193.  eor.w #$8000,d3
  4194.  
  4195.  move.w #$106,(a1)+
  4196.  move.w #$106,(a3)+
  4197.  move.w #$2c42,d5
  4198.  or.w d3,d5
  4199.  and.w #$fffe,d5
  4200.  move.w d5,(a1)+
  4201.  move.w d5,(a3)+
  4202.  bsr do32
  4203.  
  4204.  move.w #$106,(a1)+
  4205.  move.w #$106,(a3)+
  4206.  move.w #$4c42,d5
  4207.  or.w d3,d5
  4208.  and.w #$fffe,d5
  4209.  move.w d5,(a1)+
  4210.  move.w d5,(a3)+
  4211.  bsr do32
  4212.  
  4213.  move.w #$106,(a1)+
  4214.  move.w #$106,(a3)+
  4215.  move.w #$6c42,d5
  4216.  or.w d3,d5
  4217.  and.w #$fffe,d5
  4218.  move.w d5,(a1)+
  4219.  move.w d5,(a3)+
  4220.  bsr do32
  4221.  
  4222.  move.w startwait,(a1)+
  4223.  move.w #$fffe,(a1)+
  4224.  move.w endwait,(a1)+
  4225.  move.w #$ff00,(a1)+
  4226.  move.w startwait,(a3)+
  4227.  move.w #$fffe,(a3)+
  4228.  move.w endwait,(a3)+
  4229.  move.w #$ff00,(a3)+
  4230.  
  4231. ; move.l $1fe0000,(a1)+
  4232. ; move.l $1fe0000,(a3)+
  4233. ; move.l $1fe0000,(a1)+
  4234. ; move.l $1fe0000,(a3)+
  4235.  
  4236.  
  4237.  add.w #$300,startwait
  4238.  add.w #$300,endwait
  4239.  
  4240. ; move.l #$1060c42,(a1)+
  4241. ; move.l #$1060c42,(a3)+
  4242. ; move.w #$19e,(a1)+
  4243. ; move.w (a5),(a1)+
  4244. ; move.w #$19e,(a3)+
  4245. ; move.w (a5)+,(a3)+
  4246.  
  4247. **********************************
  4248.  
  4249.  adda.w #104*4,a0
  4250.  adda.w #104*4,a2
  4251.  dbra d0,.fillcop
  4252.  
  4253.  move.w #$38,fetchstart
  4254.  move.w #$b8,fetchstop
  4255.  move.w #$2c81,winstart
  4256.  move.w #$2cc1,winstop
  4257.  move.w #-40,modulo
  4258.  move.w #-40,modulo+4
  4259.  
  4260.  move.l #nullspr,d0
  4261.  move.w d0,s0l
  4262.  move.w d0,s1l
  4263.  move.w d0,s2l
  4264.  move.w d0,s3l
  4265.  move.w d0,s4l
  4266.  move.w d0,s5l
  4267.  move.w d0,s6l
  4268.  move.w d0,s7l
  4269.  swap d0
  4270.  move.w d0,s0h
  4271.  move.w d0,s1h
  4272.  move.w d0,s2h
  4273.  move.w d0,s3h
  4274.  move.w d0,s4h
  4275.  move.w d0,s5h
  4276.  move.w d0,s6h
  4277.  move.w d0,s7h 
  4278.  
  4279.  move.l scrn,a0
  4280.  move.l a0,a1
  4281.  move.l a0,a2
  4282.  add.l #40,a0
  4283.  add.l #160,a1
  4284.  add.l #280,a2
  4285.  move.l #scrntab,a3
  4286.  move.w #319,d7    ; counter
  4287.  move.w #0,d1    ; xpos
  4288. .plotscrnloop:
  4289.  move.b (a3)+,d0
  4290.  move.w d1,d2
  4291.  asr.w #3,d2
  4292.  move.b d1,d3
  4293.  not.b d3
  4294.  bclr.b d3,-40(a0,d2.w)
  4295.  bclr.b d3,(a0,d2.w)
  4296.  bclr.b d3,40(a0,d2.w)
  4297.  bclr.b d3,-40(a1,d2.w)
  4298.  bclr.b d3,(a1,d2.w)
  4299.  bclr.b d3,40(a1,d2.w)
  4300.  bclr.b d3,-40(a2,d2.w)
  4301.  btst #0,d0
  4302.  beq.s .nobp1
  4303.  bset.b d3,-40(a0,d2.w)
  4304. .nobp1:
  4305.  btst #1,d0
  4306.  beq.s .nobp2
  4307.  bset.b d3,(a0,d2.w)
  4308. .nobp2:
  4309.  btst #2,d0
  4310.  beq.s .nobp3
  4311.  bset.b d3,40(a0,d2.w)
  4312. .nobp3:
  4313.  btst #3,d0
  4314.  beq.s .nobp4
  4315.  bset.b d3,-40(a1,d2.w)
  4316. .nobp4:
  4317.  btst #4,d0
  4318.  beq.s .nobp5
  4319.  bset.b d3,(a1,d2.w)
  4320. .nobp5:
  4321.  btst #5,d0
  4322.  beq.s .nobp6
  4323.  bset.b d3,40(a1,d2.w)
  4324. .nobp6:
  4325.  btst #6,d0
  4326.  beq.s .nobp7
  4327.  bset.b d3,-40(a2,d2.w)
  4328. .nobp7:
  4329.  
  4330.  addq #1,d1
  4331.  
  4332.  dbra d7,.plotscrnloop
  4333.  
  4334.  rts
  4335.  
  4336. CLEARKEYBOARD:
  4337.  move.l #KeyMap,a5
  4338.  moveq #0,d0
  4339.  move.w #15,d1
  4340. clrloo:
  4341.  move.l d0,(a5)+
  4342.  move.l d0,(a5)+
  4343.  move.l d0,(a5)+
  4344.  move.l d0,(a5)+
  4345.  dbra d1,clrloo
  4346.  rts
  4347.  
  4348. READCONTROLS: dc.w 0
  4349.  
  4350. tstststst: dc.w 0
  4351.  
  4352. BollocksRoom:
  4353.  dc.w -1
  4354.  ds.l 50
  4355.  
  4356. GUNYOFFS:
  4357.  dc.w 20
  4358.  dc.w 20
  4359.  dc.w 0
  4360.  dc.w 20
  4361.  dc.w 20
  4362.  dc.w 0
  4363.  dc.w 0
  4364.  dc.w 20
  4365.  
  4366. PLR1_BOBBLEY: dc.l 0
  4367. PLR2_BOBBLEY: dc.l 0
  4368.  
  4369. IVEWONTEXT:
  4370. ;      12345678901234567890123456789012345678901234567890123456789012345678901234567890
  4371.  dc.b 'Enemy Player Vanquished!                '
  4372.  dc.b '                                        '
  4373.  dc.b 'Enemy Player Vanquished!                '
  4374.  dc.b '                                        '
  4375.  
  4376.  dc.b 'Oooh, that one must have hurt!          '
  4377.  dc.b '                                        '
  4378.  dc.b 'Oooh, that one must have hurt!          '
  4379.  dc.b '                                        '
  4380.  
  4381.  dc.b 'Opponent IS toast!                      '
  4382.  dc.b '                                        '
  4383.  dc.b 'Opponent IS toast!                      '
  4384.  dc.b '                                        '
  4385.  
  4386.  dc.b 'Does it hurt? DOES it? DOES IT?!?       '
  4387.  dc.b '                                        '
  4388.  dc.b 'Does it hurt? DOES it? DOES IT?!?       '
  4389.  dc.b '                                        '
  4390.  
  4391.  dc.b "Gosh, I",39,"m dreadfully sorry, old chap; didn't see you there!                     "
  4392.  dc.b "Gosh, I",39,"m dreadfully sorry, old chap; didn't see you there!                     "
  4393.  
  4394.  dc.b 'Now go away before I taunt you a second time.                                   '
  4395.  dc.b 'Now go away before I taunt you a second time.                                   '
  4396.  
  4397.  dc.b 'Eh, sorry about that there mate, didn',39,'t know it was loaded, know worra mean?    '
  4398.  dc.b 'Eh, sorry about that there mate, didn',39,'t know it was loaded, know worra mean?    '
  4399.  
  4400.  dc.b 'Stand and deliver, your money or...  oh. Never mind.                            ' 
  4401.  dc.b 'Stand and deliver, your money or...  oh. Never mind.                            '
  4402.  
  4403.  dc.b 'Thank you for your kind interest, I look forward to your custom in future lives.' 
  4404.  dc.b 'Thank you for your kind interest, I look forward to your custom in future lives.' 
  4405.  
  4406.  
  4407. USEPLR1:
  4408.  
  4409. ***********************************
  4410.  
  4411.  move.l PLR1_Obj,a0 
  4412.  move.b #4,16(a0)
  4413.  move.l ObjectPoints,a1
  4414.  move.l #ObjRotated,a2
  4415.  move.w (a0),d0
  4416.  move.l PLR1_xoff,(a1,d0.w*8)
  4417.  move.l PLR1_zoff,4(a1,d0.w*8)
  4418.  move.l PLR1_Roompt,a1
  4419.  
  4420.  moveq #0,d2
  4421.  move.b damagetaken(a0),d2
  4422.  beq .notbeenshot
  4423.  
  4424.  moveq #0,d4
  4425.  move.w ImpactX(a0),d3
  4426.  beq.s .notwist
  4427.  move.w d2,d4
  4428. .notwist:
  4429.  add.w d3,PLR1s_xspdval
  4430.  move.w ImpactZ(a0),d3
  4431.  beq.s .notwist2
  4432.  move.w d2,d4
  4433. .notwist2:
  4434.  add.w d3,PLR1s_zspdval
  4435.  move.w ImpactY(a0),d3
  4436.  ext.l d3
  4437.  asl.l #8,d3
  4438.  add.l d3,PLR1s_yvel
  4439.  
  4440.  move.w #0,ImpactX(a0)
  4441.  move.w #0,ImpactY(a0)
  4442.  move.w #0,ImpactZ(a0)
  4443.  
  4444.  jsr GetRand
  4445.  muls d4,d0
  4446.  asr.l #8,d0
  4447.  asr.l #4,d0
  4448.  add.w d0,PLR1s_angspd
  4449.  
  4450.  move.l #7*2116,hitcol
  4451.  sub.w d2,PLAYERONEHEALTH
  4452.  movem.l d0-d7/a0-a6,-(a7)
  4453.  move.w #$fffa,IDNUM
  4454.  move.w #19,Samplenum
  4455.  clr.b notifplaying
  4456.  move.w #0,Noisex
  4457.  move.w #0,Noisez
  4458.  move.w #60,Noisevol
  4459.  jsr MakeSomeNoise
  4460.  
  4461.  movem.l (a7)+,d0-d7/a0-a6
  4462.  
  4463. .notbeenshot
  4464.  move.b #0,damagetaken(a0)
  4465.  move.b #10,numlives(a0)
  4466.  
  4467.  move.w p1_angpos,Facing(a0)
  4468.  move.b PLR1_StoodInTop,ObjInTop(a0)
  4469.  
  4470.  move.w (a1),12(a0)
  4471.  move.w (a1),d2
  4472.  move.l #ZoneBrightTable,a1
  4473.  move.l (a1,d2.w*4),d2
  4474.  tst.b PLR1_StoodInTop
  4475.  bne.s .okinbott
  4476.  swap d2
  4477. .okinbott:
  4478.  
  4479.  move.w d2,2(a0)
  4480.  
  4481.  
  4482.  move.l p1_yoff,d0
  4483.  move.l p1_height,d1
  4484.  asr.l #1,d1
  4485.  add.l d1,d0
  4486.  asr.l #7,d0
  4487.  move.w d0,4(a0)
  4488.  
  4489.  tst.w PLAYERONEHEALTH
  4490.  bgt.s .okh1
  4491.  move.w #-1,12(a0)
  4492. .okh1:
  4493.  
  4494.  
  4495. ***********************************
  4496.  
  4497.  move.l PLR2_Obj,a0 
  4498.  move.b #5,16(a0)
  4499.  
  4500.  move.w p2_angpos,d0
  4501.  and.w #8190,d0
  4502.  move.w d0,Facing(a0)
  4503. ; jsr ViewpointToDraw
  4504. ; asl.w #2,d0
  4505. ; moveq #0,d1
  4506. ; move.b p2_bobble,d1
  4507. ; not.b d1
  4508. ; lsr.b #3,d1
  4509. ; and.b #$3,d1
  4510. ; add.w d1,d0
  4511. ; move.w d0,10(a0)
  4512. ; move.w #10,8(a0)
  4513.  
  4514.  move.l ObjectPoints,a1
  4515.  move.l #ObjRotated,a2
  4516.  move.w (a0),d0
  4517.  move.l PLR2_xoff,(a1,d0.w*8)
  4518.  move.l PLR2_zoff,4(a1,d0.w*8)
  4519.  move.l PLR2_Roompt,a1
  4520.  
  4521.  moveq #0,d2
  4522.  move.b damagetaken(a0),d2
  4523.  beq .notbeenshot2
  4524.  move.w ImpactX(a0),d3
  4525.  add.w d3,PLR2s_xspdval
  4526.  move.w ImpactZ(a0),d3
  4527.  add.w d3,PLR2s_zspdval
  4528.  move.w ImpactY(a0),d3
  4529.  ext.l d3
  4530.  asl.l #8,d3
  4531.  add.l d3,PLR2s_yvel
  4532.  
  4533.  move.w #0,ImpactX(a0)
  4534.  move.w #0,ImpactY(a0)
  4535.  move.w #0,ImpactZ(a0)
  4536.  
  4537.  sub.w d2,PLAYERTWOHEALTH
  4538.  
  4539.  
  4540. .notbeenshot2
  4541.  move.b #0,damagetaken(a0)
  4542.  move.b #10,numlives(a0)
  4543.  
  4544.  move.b PLR2_StoodInTop,ObjInTop(a0)
  4545.  
  4546.  move.w (a1),12(a0)
  4547.  move.w (a1),d2
  4548.  move.l #ZoneBrightTable,a1
  4549.  move.l (a1,d2.w*4),d2
  4550.  tst.b PLR2_StoodInTop
  4551.  bne.s .okinbott2
  4552.  swap d2
  4553. .okinbott2:
  4554.  
  4555.  move.w d2,2(a0)
  4556.  
  4557.  move.l p2_yoff,d0
  4558.  move.l p2_height,d1
  4559.  asr.l #1,d1
  4560.  add.l d1,d0
  4561.  asr.l #7,d0
  4562.  move.w d0,4(a0)
  4563.  
  4564.  jsr ViewpointToDraw
  4565.  add.l d0,d0
  4566.  
  4567.  move.l LINKFILE,a6
  4568.  add.l #PLR2ALIEN,a6
  4569.  move.w (a6),d7
  4570.  move.w d7,d1
  4571.  
  4572.  move.l LINKFILE,a6
  4573.  add.l #AlienStats,a6
  4574.  muls #AlienStatLen,d1
  4575.  add.l d1,a6
  4576.  move.b A_GFXType+1(a6),VECOBJ
  4577.  cmp.w #1,A_GFXType(a6)
  4578.  bne.s .NOSIDES2
  4579.  
  4580.  moveq #0,d0
  4581.  
  4582. .NOSIDES2:
  4583.  
  4584.  move.l LINKFILE,a6
  4585.  
  4586.  add.l #AlienAnimData,a6
  4587.  
  4588.  move.w d7,d1
  4589.  muls #A_AnimLen,d1
  4590.  add.l d1,a6
  4591.  
  4592. ; move.l ANIMPOINTER,a6
  4593.  
  4594.  muls #A_OptLen,d0
  4595.  add.w d0,a6
  4596.  
  4597.  move.w SecTimer(a0),d1
  4598.  move.w d1,d2
  4599.  muls #A_FrameLen,d1
  4600.  
  4601.  addq #1,d2
  4602.  
  4603.  move.w d2,d3
  4604.  muls #A_FrameLen,d3
  4605.  tst.b (a6,d3.w)
  4606.  bge.s .noendanim
  4607.  move.w #0,d2
  4608. .noendanim
  4609.  move.w d2,SecTimer(a0)
  4610.  
  4611.  move.w d2,d1
  4612.  
  4613.  muls #A_FrameLen,d1
  4614.  
  4615.  move.l #0,8(a0)
  4616.  move.b (a6,d1.w),9(a0)
  4617.  move.b 1(a6,d1.w),d0
  4618.  ext.w d0
  4619.  bgt.s .noflip
  4620.  move.b #128,10(a0)
  4621.  neg.w d0
  4622. .noflip:
  4623.  sub.w #1,d0
  4624.  move.b d0,11(a0)
  4625.  
  4626.  move.w #-1,6(a0)
  4627.  cmp.b #1,VECOBJ
  4628.  beq.s .nosize
  4629.  bgt.s .setlight
  4630.  move.w 2(a6,d1.w),6(a0)
  4631.  bra.s .ddone
  4632.  
  4633. .nosize
  4634.  
  4635. ; move.l #$00090001,8(a0)
  4636.  
  4637.  bra.s .ddone
  4638.  
  4639. .setlight:
  4640.  move.w 2(a6,d1.w),6(a0)
  4641.  
  4642.  move.b VECOBJ,d1
  4643.  or.b d1,10(a0)
  4644.  
  4645. .ddone:
  4646.  
  4647.  
  4648.  tst.w PLAYERTWOHEALTH
  4649.  bgt.s .okh
  4650.  move.w #-1,12(a0)
  4651. .okh:
  4652.  
  4653.  
  4654. **********************************
  4655.  
  4656.  move.l PLR1_Obj,a0
  4657.  
  4658.  ifeq CHEESEY
  4659.  
  4660.  tst.w PLAYERONEHEALTH
  4661.  bgt.s .notdead
  4662.  
  4663.  move.w #-1,12+128(a0)
  4664.  rts
  4665.  
  4666. .notdead: 
  4667.  
  4668.  move.l PLR1_Roompt,a1
  4669.  
  4670.  move.w Facing(a0),d0
  4671.  add.w #4096,d0
  4672.  and.w #8190,d0
  4673.  move.w d0,Facing+128(a0)
  4674.  
  4675.  move.w (a1),12+128(a0)
  4676.  move.w (a1),GraphicRoom+128(a0)
  4677.  
  4678.  moveq #0,d0
  4679.  move.b p1_gunselected,d0
  4680.  
  4681.  move.l LINKFILE,a1
  4682.  add.l #GunObjects,a1
  4683.  move.w (a1,d0.w*2),d0
  4684.  
  4685.  move.b d0,TypeOfThing+128(a0)
  4686.  move.b #1,128+16(a0)
  4687.  
  4688.  move.w (a0),d0
  4689.  move.w 128(a0),d1
  4690.  move.l ObjectPoints,a1
  4691.  move.l (a1,d0.w*8),(a1,d1.w*8)
  4692.  move.l 4(a1,d0.w*8),4(a1,d1.w*8)
  4693.  
  4694.  st WhichAnim+128(a0)
  4695.  
  4696.  move.l p1_yoff,d0
  4697.  move.l p1_height,d1
  4698.  asr.l #2,d1
  4699.  add.l #10*128,d1
  4700.  add.l d1,d0
  4701.  asr.l #7,d0
  4702.  move.w d0,4+128(a0)
  4703.  move.l PLR1_BOBBLEY,d1
  4704.  asr.l #8,d1
  4705.  move.l d1,d0
  4706.  asr.l #1,d0
  4707.  add.l d0,d1
  4708.  add.w d1,4+128(a0)
  4709.  
  4710.  move.b ObjInTop(a0),ObjInTop+128(a0)
  4711.  
  4712.  endc
  4713.  
  4714.  ifne CHEESEY
  4715.  move.w #-1,12+128(a0)
  4716.  endc
  4717.  
  4718.  rts
  4719.  
  4720. ***************************************************
  4721. **************************************************
  4722.  
  4723. USEPLR2:
  4724.  
  4725. ***********************************
  4726.  
  4727.  move.l PLR2_Obj,a0 
  4728.  move.b #5,16(a0)
  4729.  move.l ObjectPoints,a1
  4730.  move.l #ObjRotated,a2
  4731.  move.w (a0),d0
  4732.  move.l PLR2_xoff,(a1,d0.w*8)
  4733.  move.l PLR2_zoff,4(a1,d0.w*8)
  4734.  move.l PLR2_Roompt,a1
  4735.  
  4736.  moveq #0,d2
  4737.  move.b damagetaken(a0),d2
  4738.  beq .notbeenshot
  4739.  
  4740.  moveq #0,d4
  4741.  move.w ImpactX(a0),d3
  4742.  beq.s .notwist
  4743.  move.w d2,d4
  4744. .notwist:
  4745.  add.w d3,PLR2s_xspdval
  4746.  move.w ImpactZ(a0),d3
  4747.  beq.s .notwist2
  4748.  move.w d2,d4
  4749. .notwist2:
  4750.  add.w d3,PLR2s_zspdval
  4751.  
  4752.  jsr GetRand
  4753.  muls d4,d0
  4754.  asr.l #8,d0
  4755.  asr.l #4,d0
  4756.  add.w d0,PLR2s_angspd
  4757.  
  4758.  move.l #7*2116,hitcol
  4759.  sub.w d2,PLAYERTWOHEALTH
  4760.  
  4761.  
  4762.  movem.l d0-d7/a0-a6,-(a7)
  4763.  move.w #19,Samplenum
  4764.  clr.b notifplaying
  4765.  move.w #$fffa,IDNUM
  4766.  move.w #0,Noisex
  4767.  move.w #0,Noisez
  4768.  move.w #60,Noisevol
  4769.  jsr MakeSomeNoise
  4770.  
  4771.  movem.l (a7)+,d0-d7/a0-a6
  4772.  
  4773. .notbeenshot
  4774.  move.b #0,damagetaken(a0)
  4775.  move.b #10,numlives(a0)
  4776.  
  4777.  move.w p2_angpos,Facing(a0)
  4778.  move.b PLR2_StoodInTop,ObjInTop(a0)
  4779.  
  4780.  move.w (a1),12(a0)
  4781.  move.w (a1),d2
  4782.  move.l #ZoneBrightTable,a1
  4783.  move.l (a1,d2.w*4),d2
  4784.  tst.b PLR2_StoodInTop
  4785.  bne.s .okinbott
  4786.  swap d2
  4787. .okinbott:
  4788.  
  4789.  move.w d2,2(a0)
  4790.  
  4791.  move.l PLR2_yoff,d0
  4792.  move.l p2_height,d1
  4793.  asr.l #1,d1
  4794.  add.l d1,d0
  4795.  asr.l #7,d0
  4796.  move.w d0,4(a0)
  4797.  
  4798.  tst.w PLAYERTWOHEALTH
  4799.  bgt.s .okh55
  4800.  move.w #-1,12(a0)
  4801. .okh55:
  4802.  
  4803. ***********************************
  4804.  
  4805.  move.l PLR1_Obj,a0 
  4806.  move.b #4,16(a0)
  4807.  
  4808.  move.w PLR1_angpos,d0
  4809.  and.w #8190,d0
  4810.  move.w d0,Facing(a0)
  4811. ; jsr ViewpointToDraw
  4812. ; asl.w #2,d0
  4813. ; moveq #0,d1
  4814. ; move.b p2_bobble,d1
  4815. ; not.b d1
  4816. ; lsr.b #3,d1
  4817. ; and.b #$3,d1
  4818. ; add.w d1,d0
  4819. ; move.w d0,10(a0)
  4820. ; move.w #10,8(a0)
  4821.  
  4822.  move.l ObjectPoints,a1
  4823.  move.l #ObjRotated,a2
  4824.  move.w (a0),d0
  4825.  move.l PLR1_xoff,(a1,d0.w*8)
  4826.  move.l PLR1_zoff,4(a1,d0.w*8)
  4827.  move.l PLR1_Roompt,a1
  4828.  
  4829.  moveq #0,d2
  4830.  move.b damagetaken(a0),d2
  4831.  beq .notbeenshot2
  4832.  
  4833.  move.w ImpactX(a0),d3
  4834.  add.w d3,PLR1s_xspdval
  4835.  move.w ImpactZ(a0),d3
  4836.  add.w d3,PLR1s_zspdval
  4837.  
  4838.  sub.w d2,PLAYERONEHEALTH
  4839.  
  4840.  
  4841. .notbeenshot2
  4842.  move.b #0,damagetaken(a0)
  4843.  move.b #10,numlives(a0)
  4844.  
  4845.  move.b PLR1_StoodInTop,ObjInTop(a0)
  4846.  
  4847.  move.w (a1),12(a0)
  4848.  move.w (a1),d2
  4849.  move.l #ZoneBrightTable,a1
  4850.  move.l (a1,d2.w*4),d2
  4851.  tst.b PLR1_StoodInTop
  4852.  bne.s .okinbott2
  4853.  swap d2
  4854. .okinbott2:
  4855.  
  4856.  move.w d2,2(a0)
  4857.  
  4858.  move.l p1_yoff,d0
  4859.  move.l p1_height,d1
  4860.  asr.l #1,d1
  4861.  add.l d1,d0
  4862.  asr.l #7,d0
  4863.  move.w d0,4(a0)
  4864.  
  4865.  jsr ViewpointToDraw
  4866.  add.l d0,d0
  4867.  
  4868.  move.l LINKFILE,a6
  4869.  add.l #PLR1ALIEN,a6
  4870.  move.w (a6),d7
  4871.  move.w d7,d1
  4872.  
  4873.  move.l LINKFILE,a6
  4874.  add.l #AlienStats,a6
  4875.  muls #AlienStatLen,d1
  4876.  add.l d1,a6
  4877.  move.b A_GFXType+1(a6),VECOBJ
  4878.  cmp.w #1,A_GFXType(a6)
  4879.  bne.s .NOSIDES2
  4880.  
  4881.  moveq #0,d0
  4882.  
  4883. .NOSIDES2:
  4884.  
  4885.  move.l LINKFILE,a6
  4886.  
  4887.  add.l #AlienAnimData,a6
  4888.  
  4889.  move.w d7,d1
  4890.  muls #A_AnimLen,d1
  4891.  add.l d1,a6
  4892.  
  4893. ; move.l ANIMPOINTER,a6
  4894.  
  4895.  muls #A_OptLen,d0
  4896.  add.w d0,a6
  4897.  
  4898.  move.w SecTimer(a0),d1
  4899.  move.w d1,d2
  4900.  muls #A_FrameLen,d1
  4901.  
  4902.  addq #1,d2
  4903.  
  4904.  move.w d2,d3
  4905.  muls #A_FrameLen,d3
  4906.  tst.b (a6,d3.w)
  4907.  bge.s .noendanim
  4908.  move.w #0,d2
  4909. .noendanim
  4910.  move.w d2,SecTimer(a0)
  4911.  
  4912.  move.w d2,d1
  4913.  
  4914.  muls #A_FrameLen,d1
  4915.  
  4916.  move.l #0,8(a0)
  4917.  move.b (a6,d1.w),9(a0)
  4918.  move.b 1(a6,d1.w),d0
  4919.  ext.w d0
  4920.  bgt.s .noflip
  4921.  move.b #128,10(a0)
  4922.  neg.w d0
  4923. .noflip:
  4924.  sub.w #1,d0
  4925.  move.b d0,11(a0)
  4926.  
  4927.  move.w #-1,6(a0)
  4928.  cmp.b #1,VECOBJ
  4929.  beq.s .nosize
  4930.  bgt.s .setlight
  4931.  move.w 2(a6,d1.w),6(a0)
  4932.  bra.s .ddone
  4933.  
  4934. .nosize
  4935.  
  4936. ; move.l #$00090001,8(a0)
  4937.  
  4938.  bra.s .ddone
  4939.  
  4940. .setlight:
  4941.  move.w 2(a6,d1.w),6(a0)
  4942.  
  4943.  move.b VECOBJ,d1
  4944.  or.b d1,10(a0)
  4945.  
  4946. .ddone:
  4947.  
  4948.  tst.w PLAYERONEHEALTH
  4949.  bgt.s .okh
  4950.  move.w #-1,12(a0)
  4951. .okh:
  4952.  
  4953. **********************************
  4954.  
  4955.  move.l PLR2_Obj,a0
  4956.  
  4957.  ifeq CHEESEY
  4958.  
  4959.  tst.w PLAYERTWOHEALTH
  4960.  bgt.s .notdead
  4961.  
  4962.  move.w #-1,12+64(a0)
  4963.  rts
  4964.  
  4965. .notdead: 
  4966.  move.l PLR2_Roompt,a1
  4967.  
  4968.  move.w Facing(a0),d0
  4969.  add.w #4096,d0
  4970.  and.w #8190,d0
  4971.  move.w d0,Facing+64(a0)
  4972.  
  4973.  move.w (a1),12+64(a0)
  4974.  move.w (a1),GraphicRoom+64(a0)
  4975.  
  4976.  moveq #0,d0
  4977.  move.b p2_gunselected,d0
  4978.  
  4979.  move.l LINKFILE,a1
  4980.  add.l #GunObjects,a1
  4981.  move.w (a1,d0.w*2),d0
  4982.  
  4983.  move.b d0,TypeOfThing+64(a0)
  4984.  move.b #1,64+16(a0)
  4985.  
  4986.  move.w (a0),d0
  4987.  move.w 64(a0),d1
  4988.  move.l ObjectPoints,a1
  4989.  move.l (a1,d0.w*8),(a1,d1.w*8) 
  4990.  move.l 4(a1,d0.w*8),4(a1,d1.w*8) 
  4991.  
  4992.  st WhichAnim+64(a0)
  4993.  
  4994.  move.l p2_yoff,d0
  4995.  move.l p2_height,d1
  4996.  asr.l #2,d1
  4997.  add.l #10*128,d1
  4998.  add.l d1,d0
  4999.  asr.l #7,d0
  5000.  move.w d0,4+64(a0)
  5001.  move.l PLR2_BOBBLEY,d1
  5002.  asr.l #8,d1
  5003.  move.l d1,d0
  5004.  asr.l #1,d0
  5005.  add.l d0,d1
  5006.  add.w d1,4+64(a0)
  5007.  
  5008.  move.b ObjInTop(a0),ObjInTop+64(a0)
  5009.  
  5010.  endc
  5011.  
  5012.  ifne CHEESEY
  5013.  
  5014.  move.w #-1,12+64(a0)
  5015.  endc
  5016.  
  5017.  rts
  5018.  
  5019.  
  5020.  
  5021. GunSelected: dc.b 0
  5022.  even
  5023.  
  5024.  
  5025. GunData: dc.l 0
  5026.  
  5027.  
  5028. protA: dc.w 0
  5029.  
  5030. Path:
  5031. ; incbin "testpath"
  5032. endpath:
  5033. pathpt: dc.l Path
  5034.  
  5035.  
  5036. PLR1KEYS: dc.b 0
  5037. PLR1PATH: dc.b 0
  5038. PLR1MOUSE: dc.b -1
  5039. PLR1JOY: dc.b 0
  5040. PLR2KEYS: dc.b 0
  5041. PLR2PATH: dc.b 0
  5042. PLR2MOUSE: dc.b -1
  5043. PLR2JOY: dc.b 0
  5044.  
  5045.  even
  5046.  
  5047. PLR1_bobble: dc.w 0
  5048. PLR2_bobble: dc.w 0
  5049. xwobble: dc.l 0
  5050. xwobxoff: dc.w 0
  5051.  
  5052. xwobzoff: dc.w 0
  5053.  
  5054. PLR1_Control:
  5055.  
  5056. ; Take a snapshot of everything.
  5057.  
  5058.  move.l PLR1_xoff,d2
  5059.  move.l d2,PLR1_oldxoff
  5060.  move.l d2,oldx
  5061.  move.l PLR1_zoff,d3
  5062.  move.l d3,PLR1_oldzoff
  5063.  move.l d3,oldz
  5064.  move.l p1_xoff,d0
  5065.  move.l d0,PLR1_xoff
  5066.  move.l d0,newx
  5067.  move.l p1_zoff,d1
  5068.  move.l d1,newz
  5069.  move.l d1,PLR1_zoff
  5070.  
  5071.  move.l p1_height,PLR1_height
  5072.  
  5073.  sub.l d2,d0
  5074.  sub.l d3,d1
  5075.  move.l d0,xdiff
  5076.  move.l d1,zdiff
  5077.  move.w p1_angpos,d0
  5078.  move.w d0,PLR1_angpos
  5079.  
  5080.  move.l #SineTable,a1
  5081.  move.w (a1,d0.w),PLR1_sinval
  5082.  add.w #2048,d0
  5083.  and.w #8190,d0
  5084.  move.w (a1,d0.w),PLR1_cosval
  5085.  
  5086.  move.l p1_yoff,d0
  5087.  move.w p1_bobble,d1
  5088.  move.w (a1,d1.w),d1
  5089.  move.w d1,d3
  5090.  ble.s .notnegative
  5091.  neg.w d1
  5092. .notnegative:
  5093.  add.w #16384,d1
  5094.  asr.w #4,d1
  5095.  
  5096.  tst.b PLR1_Ducked
  5097.  bne.s .notdouble
  5098.  tst.b PLR1_Squished
  5099.  bne.s .notdouble
  5100.  add.w d1,d1
  5101. .notdouble
  5102.  ext.l d1
  5103.  
  5104.  move.l d1,PLR1_BOBBLEY
  5105.  
  5106.  move.l PLR1_height,d4
  5107.  sub.l d1,d4
  5108.  add.l d1,d0
  5109.  
  5110.  cmp.b #'s',mors
  5111.  beq.s .otherwob
  5112.  asr.w #6,d3
  5113.  ext.l d3
  5114.  move.l d3,xwobble
  5115.  move.w PLR1_sinval,d1
  5116.  muls d3,d1
  5117.  move.w PLR1_cosval,d2
  5118.  muls d3,d2
  5119.  swap d1
  5120.  swap d2
  5121.  asr.w #7,d1
  5122.  move.w d1,xwobxoff
  5123.  asr.w #7,d2
  5124.  neg.w d2
  5125.  move.w d2,xwobzoff
  5126. .otherwob
  5127.  
  5128.  move.l d0,PLR1_yoff
  5129.  move.l d0,newy
  5130.  move.l d0,oldy
  5131.  
  5132.  move.l d4,thingheight
  5133.  move.l #40*256,StepUpVal
  5134.  tst.b PLR1_Squished
  5135.  bne.s .smallstep
  5136.  tst.b PLR1_Ducked
  5137.  beq.s .okbigstep
  5138. .smallstep
  5139.  move.l #10*256,StepUpVal
  5140. .okbigstep:
  5141.  
  5142.  move.l #$1000000,StepDownVal
  5143.  
  5144.  move.l PLR1_Roompt,a0
  5145.  move.w ToTelZone(a0),d0
  5146.  blt .noteleport
  5147.  
  5148.  move.w ToTelX(a0),newx
  5149.  move.w ToTelZ(a0),newz
  5150.  
  5151.  move.l PLR1_Obj,a0
  5152.  move.w (a0),CollId
  5153.  
  5154.  move.l #%111111111111111111,CollideFlags
  5155.  jsr Collision
  5156.  tst.b hitwall
  5157.  beq.s .teleport
  5158.  
  5159.  move.w PLR1_xoff,newx
  5160.  move.w PLR1_zoff,newz
  5161.  bra .noteleport
  5162.  
  5163. .teleport:
  5164.  
  5165.  st PLR1_TELEPORTED
  5166.  
  5167.  move.l PLR1_Roompt,a0
  5168.  move.w ToTelZone(a0),d0
  5169.  move.w ToTelX(a0),PLR1_xoff
  5170.  move.w ToTelZ(a0),PLR1_zoff
  5171.  move.l PLR1_yoff,d1
  5172.  sub.l ToZoneFloor(a0),d1
  5173.  move.l ZoneAdds,a0
  5174.  move.l (a0,d0.w*4),a0
  5175.  add.l LEVELDATA,a0
  5176.  move.l a0,PLR1_Roompt
  5177.  add.l ToZoneFloor(a0),d1
  5178.  move.l d1,PLR1s_yoff
  5179.  move.l d1,PLR1_yoff
  5180.  move.l d1,PLR1s_tyoff
  5181.  move.l PLR1_xoff,PLR1s_xoff
  5182.  move.l PLR1_zoff,PLR1s_zoff
  5183.  
  5184.  SAVEREGS
  5185.  move.w #0,Noisex
  5186.  move.w #0,Noisez
  5187.  move.w #26,Samplenum
  5188.  move.w #100,Noisevol
  5189.  move.w #$fff9,IDNUM
  5190.  jsr MakeSomeNoise
  5191.  GETREGS
  5192.  
  5193.  bra .cantmove
  5194.  
  5195. .noteleport:
  5196.  
  5197.  move.l PLR1_Roompt,objroom
  5198.  move.w #%100000000,wallflags
  5199.  move.b PLR1_StoodInTop,StoodInTop
  5200.  
  5201.  move.l #%1011111110111000011,CollideFlags
  5202.  move.l PLR1_Obj,a0
  5203.  move.w (a0),CollId
  5204.  
  5205.  jsr Collision
  5206.  tst.b hitwall
  5207.  beq.s .nothitanything
  5208.  move.w oldx,PLR1_xoff
  5209.  move.w oldz,PLR1_zoff
  5210.  move.l PLR1_xoff,PLR1s_xoff
  5211.  move.l PLR1_zoff,PLR1s_zoff
  5212.  bra .cantmove
  5213. .nothitanything:
  5214.  
  5215.  move.w #40,extlen
  5216.  move.b #0,awayfromwall
  5217.  
  5218.  clr.b exitfirst
  5219.  clr.b wallbounce
  5220.  bsr MoveObject
  5221.  move.b StoodInTop,PLR1_StoodInTop
  5222.  move.l objroom,PLR1_Roompt
  5223.  move.w newx,PLR1_xoff
  5224.  move.w newz,PLR1_zoff
  5225.  move.l PLR1_xoff,PLR1s_xoff
  5226.  move.l PLR1_zoff,PLR1s_zoff
  5227.  
  5228. .cantmove:
  5229.  
  5230.  move.l PLR1_Roompt,a0
  5231.  
  5232.  move.l ToZoneFloor(a0),d0
  5233.  tst.b PLR1_StoodInTop
  5234.  beq.s notintop
  5235.  move.l ToUpperFloor(a0),d0
  5236. notintop:
  5237.  
  5238.  adda.w #ToZonePts,a0
  5239.  sub.l PLR1_height,d0
  5240.  move.l d0,PLR1s_tyoff
  5241.  move.w p1_angpos,tmpangpos
  5242.  
  5243. ; move.l (a0),a0        ; jump to viewpoint list
  5244.  * A0 is pointing at a pointer to list of points to rotate
  5245.  move.w (a0)+,d1
  5246.  ext.l d1
  5247.  add.l PLR1_Roompt,d1
  5248.  move.l d1,PLR1_PointsToRotatePtr
  5249.  tst.b (a0)+
  5250.  sne.s DRAWNGRAPHTOP
  5251.  beq.s nobackgraphics
  5252.  cmp.b #'s',mors
  5253.  beq.s nobackgraphics
  5254.  move.l a0,-(a7)
  5255.  jsr putinbackdrop 
  5256.  move.l (a7)+,a0
  5257. nobackgraphics:
  5258.  
  5259.  move.b (a0)+,PLR1_Echo
  5260.  
  5261.  adda.w #10,a0
  5262.  move.l a0,PLR1_ListOfGraphRooms
  5263.  
  5264. *************************************************
  5265.  rts
  5266.  
  5267. DRAWNGRAPHTOP
  5268.  dc.w 0 
  5269. tstzone: dc.l 0
  5270. CollId: dc.w 0
  5271.  
  5272. PLR2_Control:
  5273.  
  5274. ; Take a snapshot of everything.
  5275.  
  5276.  move.l PLR2_xoff,d2
  5277.  move.l d2,PLR2_oldxoff
  5278.  move.l d2,oldx
  5279.  move.l PLR2_zoff,d3
  5280.  move.l d3,PLR2_oldzoff
  5281.  move.l d3,oldz
  5282.  move.l p2_xoff,d0
  5283.  move.l d0,PLR2_xoff
  5284.  move.l d0,newx
  5285.  move.l p2_zoff,d1
  5286.  move.l d1,newz
  5287.  move.l d1,PLR2_zoff
  5288.  
  5289.  move.l p2_height,PLR2_height
  5290.  
  5291.  sub.l d2,d0
  5292.  sub.l d3,d1
  5293.  move.l d0,xdiff
  5294.  move.l d1,zdiff
  5295.  move.w p2_angpos,d0
  5296.  move.w d0,PLR2_angpos
  5297.  
  5298.  move.l #SineTable,a1
  5299.  move.w (a1,d0.w),PLR2_sinval
  5300.  add.w #2048,d0
  5301.  and.w #8190,d0
  5302.  move.w (a1,d0.w),PLR2_cosval
  5303.  
  5304.  move.l p2_yoff,d0
  5305.  move.w p2_bobble,d1
  5306.  move.w (a1,d1.w),d1
  5307.  move.w d1,d3
  5308.  ble.s .notnegative
  5309.  neg.w d1
  5310. .notnegative:
  5311.  add.w #16384,d1
  5312.  asr.w #4,d1
  5313.  
  5314.  tst.b PLR2_Ducked
  5315.  bne.s .notdouble
  5316.  tst.b PLR2_Squished
  5317.  bne.s .notdouble
  5318.  add.w d1,d1
  5319. .notdouble
  5320.  ext.l d1
  5321.  
  5322.  move.l d1,PLR2_BOBBLEY
  5323.  
  5324.  move.l PLR2_height,d4
  5325.  sub.l d1,d4
  5326.  add.l d1,d0
  5327.  
  5328.  cmp.b #'s',mors
  5329.  bne.s .otherwob
  5330.  asr.w #6,d3
  5331.  ext.l d3
  5332.  move.l d3,xwobble
  5333.  move.w PLR2_sinval,d1
  5334.  muls d3,d1
  5335.  move.w PLR2_cosval,d2
  5336.  muls d3,d2
  5337.  swap d1
  5338.  swap d2
  5339.  asr.w #7,d1
  5340.  move.w d1,xwobxoff
  5341.  asr.w #7,d2
  5342.  neg.w d2
  5343.  move.w d2,xwobzoff
  5344. .otherwob
  5345.  
  5346.  move.l d0,PLR2_yoff
  5347.  move.l d0,newy
  5348.  move.l d0,oldy
  5349.  
  5350.  move.l d4,thingheight
  5351.  move.l #40*256,StepUpVal
  5352.  tst.b PLR2_Squished
  5353.  bne.s .smallstep
  5354.  tst.b PLR2_Ducked
  5355.  beq.s .okbigstep
  5356. .smallstep:
  5357.  move.l #10*256,StepUpVal
  5358. .okbigstep:
  5359.  
  5360.  move.l #$1000000,StepDownVal
  5361.  
  5362.  move.l PLR2_Roompt,a0
  5363.  move.w ToTelZone(a0),d0
  5364.  blt .noteleport
  5365.  
  5366.  move.w ToTelX(a0),newx
  5367.  move.w ToTelZ(a0),newz
  5368.  move.w PLR2_Obj,a0
  5369.  move.w (a0),CollId
  5370.  move.l #%111111111111111111,CollideFlags
  5371.  jsr Collision
  5372.  tst.b hitwall
  5373.  beq.s .teleport
  5374.  
  5375.  move.w PLR2_xoff,newx
  5376.  move.w PLR2_zoff,newz
  5377.  bra .noteleport
  5378.  
  5379. .teleport:
  5380.  
  5381.  st PLR2_TELEPORTED
  5382.  
  5383.  move.l PLR2_Roompt,a0
  5384.  move.w ToTelZone(a0),d0
  5385.  move.w ToTelX(a0),PLR2_xoff
  5386.  move.w ToTelZ(a0),PLR2_zoff
  5387.  move.l PLR2_yoff,d1
  5388.  sub.l ToZoneFloor(a0),d1
  5389.  move.l ZoneAdds,a0
  5390.  move.l (a0,d0.w*4),a0
  5391.  add.l LEVELDATA,a0
  5392.  move.l a0,PLR2_Roompt
  5393.  add.l ToZoneFloor(a0),d1
  5394.  move.l d1,PLR2s_yoff
  5395.  move.l d1,PLR2_yoff
  5396.  move.l d1,PLR2s_tyoff
  5397.  move.l PLR2_xoff,PLR2s_xoff
  5398.  move.l PLR2_zoff,PLR2s_zoff
  5399.  
  5400.  SAVEREGS
  5401.  move.w #0,Noisex
  5402.  move.w #0,Noisez
  5403.  move.w #26,Samplenum
  5404.  move.w #100,Noisevol
  5405.  move.w #$fff9,IDNUM
  5406.  jsr MakeSomeNoise
  5407.  GETREGS
  5408.  
  5409.  bra .cantmove
  5410.  
  5411. .noteleport:
  5412.  
  5413.  move.l PLR2_Roompt,objroom
  5414.  move.w #%100000000000,wallflags
  5415.  move.b PLR2_StoodInTop,StoodInTop
  5416.  
  5417.  move.l #%1011111010111100011,CollideFlags
  5418.  move.l PLR2_Obj,a0
  5419.  move.w (a0),CollId
  5420.  
  5421.  jsr Collision
  5422.  tst.b hitwall
  5423.  beq.s .nothitanything
  5424.  move.w oldx,PLR2_xoff
  5425.  move.w oldz,PLR2_zoff
  5426.  move.l PLR2_xoff,PLR2s_xoff
  5427.  move.l PLR2_zoff,PLR2s_zoff
  5428.  bra .cantmove
  5429. .nothitanything:
  5430.  
  5431.  move.w #40,extlen
  5432.  move.b #0,awayfromwall
  5433.  
  5434.  clr.b exitfirst
  5435.  clr.b wallbounce
  5436.  bsr MoveObject
  5437.  move.b StoodInTop,PLR2_StoodInTop
  5438.  move.l objroom,PLR2_Roompt
  5439.  move.w newx,PLR2_xoff
  5440.  move.w newz,PLR2_zoff
  5441.  move.l PLR2_xoff,PLR2s_xoff
  5442.  move.l PLR2_zoff,PLR2s_zoff
  5443.  
  5444. .cantmove
  5445.  
  5446.  move.l PLR2_Roompt,a0
  5447.  
  5448.  move.l ToZoneFloor(a0),d0
  5449.  tst.b PLR2_StoodInTop
  5450.  beq.s .notintop
  5451.  move.l ToUpperFloor(a0),d0
  5452. .notintop:
  5453.  
  5454.  adda.w #ToZonePts,a0
  5455.  sub.l PLR2_height,d0
  5456.  move.l d0,PLR2s_tyoff
  5457.  move.w p2_angpos,tmpangpos
  5458.  
  5459. ; move.l (a0),a0        ; jump to viewpoint list
  5460.  * A0 is pointing at a pointer to list of points to rotate
  5461.  move.w (a0)+,d1
  5462.  ext.l d1
  5463.  add.l PLR2_Roompt,d1
  5464.  move.l d1,PLR2_PointsToRotatePtr
  5465.  tst.b (a0)+
  5466.  sne.s DRAWNGRAPHTOP
  5467.  beq.s .nobackgraphics
  5468.  cmp.b #'s',mors
  5469.  bne.s .nobackgraphics
  5470.  move.l a0,-(a7)
  5471.  jsr putinbackdrop 
  5472.  move.l (a7)+,a0
  5473. .nobackgraphics:
  5474.  
  5475.  move.b (a0)+,PLR2_Echo
  5476.  
  5477.  adda.w #10,a0
  5478.  move.l a0,PLR2_ListOfGraphRooms
  5479.  
  5480. *****************************************************
  5481.  rts
  5482.  
  5483.  
  5484. KeyMap: ds.b 256
  5485.  
  5486. fillscrnwater:
  5487.  dc.w 0
  5488. DONTDOGUN:
  5489.  dc.w 0
  5490.  
  5491. ;temptemp: ds.l 200
  5492. ;temptempptr: dc.l 0
  5493.  
  5494. DrawDisplay:
  5495.  
  5496. ; move.l #temptemp,temptempptr
  5497.  
  5498.  clr.b fillscrnwater
  5499.  
  5500.  move.l #SineTable,a0
  5501.  move.w angpos,d0
  5502.  move.w (a0,d0.w),d6
  5503.  adda.w #2048,a0
  5504.  move.w (a0,d0.w),d7
  5505.  move.w d6,sinval
  5506.  move.w d7,cosval
  5507.  
  5508.  move.l yoff,d0
  5509.  asr.l #8,d0
  5510.  move.w d0,d1
  5511.  add.w #256-32,d1
  5512.  and.w #255,d1
  5513.  move.w d1,wallyoff
  5514.  move.l yoff,d0
  5515.  asr.l #6,d0
  5516.  move.w d0,flooryoff
  5517.  
  5518.  move.w xoff,d6
  5519.  move.w d6,d3
  5520.  asr.w #1,d3
  5521.  add.w d3,d6
  5522.  asr.w #1,d6
  5523.  move.w d6,xoff34
  5524.  
  5525.  move.w zoff,d6
  5526.  move.w d6,d3
  5527.  asr.w #1,d3
  5528.  add.w d3,d6
  5529.  asr.w #1,d6
  5530.  move.w d6,zoff34
  5531.  
  5532.  bsr RotateLevelPts
  5533.  bsr RotateObjectPts
  5534.  bsr CalcPLR1InLine
  5535.  
  5536.  cmp.b #'n',mors
  5537.  bne.s doplr2too
  5538.  move.l PLR2_Obj,a0
  5539.  move.w #-1,12(a0)
  5540.  move.w #-1,GraphicRoom(a0)
  5541.  bra noplr2either
  5542.  
  5543. doplr2too:
  5544.  bsr CalcPLR2InLine
  5545. noplr2either:
  5546.  
  5547.  move.l endoflist,a0
  5548. ; move.w #-1,(a0)
  5549.  
  5550. ; move.l #FinalOrder,a0
  5551.  
  5552.  
  5553. subroomloop:
  5554. ; move.w (a0)+,d7
  5555.  move.w -(a0),d7
  5556.  blt jumpoutofrooms
  5557.  
  5558. ; bsr setlrclip
  5559. ; move.w leftclip,d0
  5560. ; cmp.w rightclip,d0
  5561. ; bge subroomloop
  5562.  move.l a0,-(a7)
  5563.  
  5564.  move.l ZoneAdds,a0
  5565.  move.l (a0,d7.w*4),a0
  5566.  add.l LEVELDATA,a0
  5567.  move.l ToZoneRoof(a0),SplitHeight
  5568.  move.l a0,ROOMBACK
  5569.  
  5570.  move.l ZoneGraphAdds,a0
  5571.  move.l 4(a0,d7.w*8),a2
  5572.  move.l (a0,d7.w*8),a0
  5573.  
  5574.  add.l LEVELGRAPHICS,a0
  5575.  add.l LEVELGRAPHICS,a2
  5576.  move.l a2,ThisRoomToDraw+4
  5577.  move.l a0,ThisRoomToDraw
  5578.  
  5579.  move.l ListOfGraphRooms,a1
  5580.  
  5581.  
  5582.  
  5583. finditit:
  5584.  tst.w (a1)
  5585.  blt nomoretodoatall
  5586.  cmp.w (a1),d7
  5587.  beq outoffind
  5588.  adda.w #8,a1
  5589.  bra finditit
  5590.  
  5591. outoffind:
  5592.  
  5593.  move.l a1,-(a7)
  5594.  
  5595.  
  5596.  move.w #0,leftclip
  5597.  move.w RIGHTX,rightclip
  5598.  moveq #0,d7
  5599.  move.w 2(a1),d7
  5600.  blt.s outofrcliplop
  5601.  move.l LEVELCLIPS,a0
  5602.  lea (a0,d7.l*2),a0
  5603.  
  5604.  tst.w (a0)
  5605.  blt outoflcliplop
  5606.  
  5607.  bsr NEWsetlclip
  5608.  
  5609. intolcliplop:        ; clips
  5610.  tst.w (a0)
  5611.  blt outoflcliplop
  5612.  
  5613.  bsr NEWsetlclip 
  5614.  bra intolcliplop
  5615.  
  5616. outoflcliplop:
  5617.  
  5618.  addq #2,a0
  5619.  
  5620.  tst.w (a0)
  5621.  blt outofrcliplop
  5622.  
  5623.  bsr NEWsetrclip
  5624.  
  5625. intorcliplop:        ; clips
  5626.  tst.w (a0)
  5627.  blt outofrcliplop
  5628.  
  5629.  bsr NEWsetrclip 
  5630.  bra intorcliplop
  5631.  
  5632. outofrcliplop:
  5633.  
  5634.  
  5635.  move.w leftclip,d0
  5636.  ext.l d0
  5637.  move.l d0,leftclip-2
  5638.  
  5639.  cmp.w RIGHTX,d0
  5640.  bge dontbothercantseeit
  5641.  move.w rightclip,d1
  5642.  ext.l d1
  5643.  move.l d1,rightclip-2
  5644.  blt dontbothercantseeit
  5645.  cmp.w d1,d0
  5646.  bge dontbothercantseeit
  5647.  
  5648.  move.l yoff,d0
  5649.  cmp.l SplitHeight,d0
  5650.  blt botfirst
  5651.  
  5652.  move.l ThisRoomToDraw+4,a0
  5653.  cmp.l LEVELGRAPHICS,a0
  5654.  beq.s noupperroom
  5655.  st DOUPPER
  5656.  
  5657.  move.l ROOMBACK,a1
  5658.  move.l ToUpperRoof(a1),TOPOFROOM
  5659.  move.l ToUpperFloor(a1),BOTOFROOM
  5660.  
  5661.  move.l #CurrentPointBrights+4,PointBrightsPtr
  5662.  bsr dothisroom
  5663. noupperroom:
  5664.  move.l ThisRoomToDraw,a0
  5665.  clr.b DOUPPER
  5666.  move.l #CurrentPointBrights,PointBrightsPtr
  5667.  
  5668.  move.l ROOMBACK,a1
  5669.  move.l ToZoneRoof(a1),d0
  5670.  move.l d0,TOPOFROOM
  5671.  move.l ToZoneFloor(a1),d1
  5672.  move.l d1,BOTOFROOM
  5673.  
  5674.  move.l ToZoneWater(a1),d2
  5675.  cmp.l yoff,d2
  5676.  blt.s .abovefirst
  5677.  move.l d2,BEFOREWATTOP
  5678.  move.l d1,BEFOREWATBOT
  5679.  move.l d2,AFTERWATBOT
  5680.  move.l d0,AFTERWATTOP
  5681.  bra.s .belowfirst
  5682. .abovefirst:
  5683.  move.l d0,BEFOREWATTOP
  5684.  move.l d2,BEFOREWATBOT
  5685.  move.l d1,AFTERWATBOT
  5686.  move.l d2,AFTERWATTOP
  5687. .belowfirst:
  5688.  
  5689.  bsr dothisroom
  5690.  
  5691.  bra dontbothercantseeit
  5692. botfirst:
  5693.  
  5694.  move.l ThisRoomToDraw,a0
  5695.  clr.b DOUPPER
  5696.  move.l #CurrentPointBrights,PointBrightsPtr
  5697.  
  5698.  move.l ROOMBACK,a1
  5699.  move.l ToZoneRoof(a1),d0
  5700.  move.l d0,TOPOFROOM
  5701.  move.l ToZoneFloor(a1),d1
  5702.  move.l d1,BOTOFROOM
  5703.  
  5704.  move.l ToZoneWater(a1),d2
  5705.  cmp.l yoff,d2
  5706.  blt.s .abovefirst
  5707.  move.l d2,BEFOREWATTOP
  5708.  move.l d1,BEFOREWATBOT
  5709.  move.l d2,AFTERWATBOT
  5710.  move.l d0,AFTERWATTOP
  5711.  bra.s .belowfirst
  5712. .abovefirst:
  5713.  move.l d0,BEFOREWATTOP
  5714.  move.l d2,BEFOREWATBOT
  5715.  move.l d1,AFTERWATBOT
  5716.  move.l d2,AFTERWATTOP
  5717. .belowfirst:
  5718.  
  5719.  
  5720.  bsr dothisroom
  5721.  move.l ThisRoomToDraw+4,a0
  5722.  cmp.l LEVELGRAPHICS,a0
  5723.  beq.s noupperroom2
  5724.  move.l #CurrentPointBrights+4,PointBrightsPtr
  5725.  
  5726.  move.l ROOMBACK,a1
  5727.  move.l ToUpperRoof(a1),TOPOFROOM
  5728.  move.l ToUpperFloor(a1),BOTOFROOM
  5729.  
  5730.  st DOUPPER
  5731.  bsr dothisroom
  5732. noupperroom2:
  5733.  
  5734. dontbothercantseeit:
  5735. pastemp:
  5736.  
  5737.  move.l (a7)+,a1
  5738.  move.l ThisRoomToDraw,a0
  5739.  move.w (a0),d7
  5740.  
  5741.  adda.w #8,a1
  5742.  bra finditit
  5743.  
  5744. nomoretodoatall:
  5745.  
  5746.  move.l (a7)+,a0
  5747.  
  5748.  bra subroomloop
  5749.  
  5750. jumpoutofrooms:
  5751.  
  5752.  
  5753.  tst.b DONTDOGUN
  5754.  bne NOGUNLOOK
  5755.  
  5756.  cmp.b #'s',mors
  5757.  beq.s drawslavegun
  5758.  
  5759.  moveq #0,d0
  5760.  move.b PLR1_GunSelected,d0
  5761.  moveq #0,d1
  5762.  move.b PLR1_GunFrame,d1
  5763. ; bsr DRAWINGUN
  5764.  bra drawngun
  5765.  
  5766. drawslavegun
  5767.  moveq #0,d0
  5768.  move.b PLR2_GunSelected,d0
  5769.  moveq #0,d1
  5770.  move.b PLR2_GunFrame,d1
  5771. ; bsr DRAWINGUN
  5772.  
  5773. drawngun:
  5774.  
  5775. NOGUNLOOK:
  5776.  
  5777.  moveq #0,d1
  5778.  move.b PLR1_GunFrame,d1
  5779.  sub.w TempFrames,d1
  5780.  bgt.s .nn
  5781.  moveq #0,d1
  5782. .nn
  5783.  move.b d1,PLR1_GunFrame
  5784.  
  5785.  ble.s .donefire
  5786.  sub.b #1,PLR1_GunFrame
  5787. .donefire:
  5788.  
  5789.  moveq #0,d1
  5790.  move.b PLR2_GunFrame,d1
  5791.  sub.w TempFrames,d1
  5792.  bgt.s .nn2
  5793.  moveq #0,d1
  5794. .nn2
  5795.  move.b d2,PLR2_GunFrame
  5796.  
  5797.  ble.s .donefire2
  5798.  sub.b #1,PLR2_GunFrame
  5799. .donefire2:
  5800.  
  5801.  tst.b DOANYWATER
  5802.  beq.s nowaterfull
  5803.  
  5804.  move.w #231,d0
  5805.  move.l FASTBUFFER,a0
  5806.  tst.b fillscrnwater
  5807.  beq nowaterfull
  5808.  bgt oknothalf
  5809.  moveq #119,d0
  5810.  add.l #320*120*2,a0
  5811. oknothalf:
  5812.  
  5813.  bclr.b #1,$bfe001
  5814.  
  5815.  move.l TexturePal,a2
  5816.  add.l #256*40,a2
  5817.  moveq #0,d2
  5818.  
  5819.  tst.b FULLSCR
  5820.  bne.s DOALLSCREEN
  5821.  
  5822. DOSOMESCREEN:
  5823.  
  5824.  move.w #159,d0
  5825. .fw:
  5826.  move.w #191,d1
  5827. .fwa:
  5828.  move.b (a0),d2
  5829.  move.b (a2,d2.w),(a0)+
  5830.  dbra d1,.fwa
  5831.  add.w #(320-192),a0
  5832.  dbra d0,.fw
  5833.  rts
  5834.  
  5835. DOALLSCREEN:
  5836.  
  5837. fw:
  5838.  move.w #287,d1
  5839. fwa:
  5840.  move.b (a0),d2
  5841.  move.b (a2,d2.w),(a0)+
  5842.  dbra d1,fwa
  5843.  add.w #32,a0
  5844.  dbra d0,fw
  5845.  
  5846. ; move.l frompt,a0
  5847. ; add.l #104*4*60,a0
  5848. ; move.w #31,d0
  5849. ;fw:
  5850. ; move.w d5,d1
  5851. ; move.l a0,a1
  5852. ;fwd:
  5853. ;val SET 104*4*19
  5854. ; REPT 20
  5855. ; and.w #$ff,val(a1)
  5856. ;val SET val-104*4
  5857. ; ENDR
  5858. ; sub.l #104*4*20,a1
  5859. ; dbra d1,fwd
  5860. ; addq #4,a0
  5861. ; dbra d0,fw
  5862. ;
  5863. ; addq #4,a0
  5864. ;
  5865. ; move.w #31,d0
  5866. ;sw:
  5867. ; move.w d5,d1
  5868. ; move.l a0,a1
  5869. ;swd:
  5870. ;val SET 104*4*19
  5871. ; REPT 20
  5872. ; and.w #$ff,val(a1)
  5873. ;val SET val-104*4
  5874. ; ENDR
  5875. ; sub.l #104*4*20,a1
  5876. ; dbra d1,swd
  5877. ; addq #4,a0
  5878. ; dbra d0,sw
  5879. ;
  5880. ; addq #4,a0
  5881. ;
  5882. ; move.w #31,d0
  5883. ;tw:
  5884. ; move.w d5,d1
  5885. ; move.l a0,a1
  5886. ;twd:
  5887. ;val SET 104*4*19
  5888. ; REPT 20
  5889. ; and.w #$ff,val(a1)
  5890. ;val SET val-104*4
  5891. ; ENDR
  5892. ; sub.l #104*4*20,a1
  5893. ; dbra d1,twd
  5894. ; addq #4,a0
  5895. ; dbra d0,tw
  5896. ;
  5897.  rts
  5898.  
  5899. nowaterfull:
  5900.  bset.b #1,$bfe001
  5901.  rts
  5902.  
  5903. prot9: dc.w 0
  5904.  
  5905. ;TempBuffer: ds.l 100 
  5906.  
  5907. prot8: dc.w 0
  5908.  
  5909. ClipTable: ds.l 30
  5910. EndOfClipPt: dc.l 0
  5911. DOUPPER: dc.w 0
  5912.  
  5913. RealTable:
  5914.  dc.l prot1-78935450
  5915.  dc.l prot2-78935450
  5916.  dc.l prot3-78935450
  5917.  dc.l prot4-78935450
  5918.  dc.l prot5-78935450
  5919.  dc.l prot6-78935450
  5920.  dc.l prot7-78935450
  5921.  dc.l prot8-78935450
  5922.  dc.l prot9-78935450
  5923.  dc.l protA-78935450
  5924.  
  5925. dothisroom
  5926.  
  5927.  move.w (a0)+,d0
  5928.  move.w d0,currzone
  5929.  move.w d0,d1
  5930.  muls #40,d1
  5931.  add.l #BIGMAP,d1
  5932.  move.l d1,BIGPTR
  5933.  move.w d0,d1
  5934.  ext.l d1
  5935.  asl.w #2,d1
  5936.  add.l #COMPACTMAP,d1
  5937.  move.l d1,COMPACTPTR
  5938.  add.l #4,d1
  5939.  cmp.l LASTZONE,d1
  5940.  ble.s .nochange
  5941.  move.l d1,LASTZONE
  5942. .nochange:
  5943.  
  5944.  move.l #ZoneBrightTable,a1
  5945.  move.l (a1,d0.w*4),d1
  5946.  tst.b DOUPPER
  5947.  bne.s .okbot
  5948.  swap d1
  5949. .okbot:
  5950.  move.w d1,ZoneBright
  5951.  
  5952. polyloop:
  5953.  move.w (a0)+,d0
  5954.  move.w d0,WALLIDENT
  5955.  and.w #$ff,d0
  5956.  tst.b d0
  5957.  blt jumpoutofloop
  5958.  beq itsawall
  5959.  cmp.w #3,d0
  5960.  beq itsasetclip
  5961.  blt itsafloor
  5962.  cmp.w #4,d0
  5963.  beq itsanobject
  5964.  cmp.w #5,d0
  5965.  beq itsanarc
  5966.  cmp.w #6,d0
  5967.  beq itsalightbeam
  5968.  cmp.w #7,d0
  5969.  beq.s itswater
  5970.  cmp.w #9,d0
  5971.  ble itsachunkyfloor
  5972.  cmp.w #11,d0
  5973.  ble itsabumpyfloor
  5974.  cmp.w #12,d0
  5975.  beq.s itsbackdrop
  5976.  cmp.w #13,d0
  5977.  beq.s itsaseewall
  5978.  
  5979.  bra polyloop
  5980.  
  5981. itsaseewall:
  5982.  st seethru
  5983.  jsr itsawalldraw
  5984.  bra polyloop
  5985.  
  5986. itsbackdrop:
  5987.  jsr putinbackdrop
  5988.  bra polyloop
  5989.  
  5990. itswater:
  5991.  PROTHCHECK
  5992.  move.w #2,SMALLIT
  5993.  move.w #3,d0
  5994.  clr.b gourfloor
  5995.  move.l #FloorLine,LineToUse
  5996.  st usewater
  5997.  clr.b usebumps
  5998.  jsr itsafloordraw
  5999.  bra polyloop
  6000.  
  6001. itsanarc:
  6002.  jsr CurveDraw
  6003.  bra polyloop
  6004.  
  6005. itsanobject:
  6006.  jsr ObjDraw
  6007.  bra polyloop
  6008.  
  6009. itsalightbeam:
  6010.  jsr LightDraw
  6011.  bra polyloop
  6012.  
  6013. itsabumpyfloor:
  6014.  move.w #1,SMALLIT
  6015.  sub.w #9,d0
  6016.  st usebumps
  6017.  st smoothbumps
  6018.  clr.b usewater
  6019.  move.l #BumpLine,LineToUse
  6020.  jsr itsafloordraw
  6021.  bra polyloop
  6022.  
  6023. itsachunkyfloor:
  6024.  move.w #1,SMALLIT
  6025.  subq.w #7,d0
  6026.  st usebumps
  6027.  sub.w #12,topclip
  6028. ; add.w #10,botclip
  6029.  clr.b smoothbumps
  6030.  clr.b usewater
  6031.  move.l #BumpLine,LineToUse
  6032.  jsr itsafloordraw
  6033.  add.w #12,topclip
  6034. ; sub.w #10,botclip
  6035.  bra polyloop 
  6036.  
  6037. itsafloor:
  6038.  
  6039.  move.l PointBrightsPtr,FloorPtBrights
  6040.  
  6041.  move.w currzone,d1
  6042.  muls #80,d1
  6043.  
  6044.  cmp.w #2,d0
  6045.  bne.s .nfl
  6046.  add.l #2,d1
  6047. .nfl
  6048.  add.l d1,FloorPtBrights
  6049.  
  6050.  move.w #1,SMALLIT
  6051.  
  6052.  movem.l a0/d0,-(a7)
  6053.  move.l $4.w,a6
  6054.  jsr _LVOSuperState(a6)
  6055.  move.l d0,SSTACK
  6056.  movem.l (a7)+,a0/d0
  6057.  
  6058.  move.l #FloorLine,LineToUse
  6059. * 1,2 = floor/roof
  6060.  clr.b usewater
  6061.  clr.b usebumps
  6062.  move.b GOURSEL,gourfloor    
  6063.  jsr itsafloordraw
  6064.  move.l a0,-(a7)
  6065.  move.l $4.w,a6
  6066.  move.l SSTACK,d0
  6067.  jsr _LVOUserState(a6)
  6068.  move.l (a7)+,a0
  6069.  bra polyloop
  6070. itsasetclip:
  6071.  bra polyloop
  6072. itsawall:
  6073.  clr.b seethru
  6074. ; move.l #stripbuffer,a1
  6075.  jsr itsawalldraw
  6076.  bra polyloop
  6077.  
  6078. jumpoutofloop:
  6079.  rts
  6080.  
  6081. LASTZONE: dc.l 0
  6082. COMPACTPTR: dc.l 0
  6083. BIGPTR: dc.l 0
  6084. WALLIDENT: dc.w 0
  6085. SMALLIT: dc.w 0
  6086. GOURSEL: dc.w 0
  6087. ThisRoomToDraw: dc.l 0,0
  6088. SplitHeight: dc.l 0
  6089.  
  6090.  include "ab3:source_4000/OrderZones"
  6091.  
  6092. ReadMouse:
  6093.  move.l #$dff000,a6
  6094.  clr.l d0
  6095.  clr.l d1
  6096.  move.w $a(a6),d0
  6097.  lsr.w #8,d0
  6098.  ext.l d0
  6099.  move.w d0,d3
  6100.  move.w oldmy,d2
  6101.  sub.w d2,d0
  6102.  
  6103.  cmp.w #127,d0
  6104.  blt nonegy
  6105.  move.w #255,d1
  6106.  sub.w d0,d1
  6107.  move.w d1,d0
  6108.  neg.w d0
  6109. nonegy:
  6110.  
  6111.  cmp.w #-127,d0
  6112.  bge nonegy2
  6113.  move.w #255,d1
  6114.  add.w d0,d1
  6115.  move.w d1,d0
  6116. nonegy2:
  6117.  
  6118.  add.b d0,d2
  6119.  add.w d0,oldy2
  6120.  move.w d2,oldmy
  6121.  move.w d2,d0
  6122.  
  6123.  move.w oldy2,d0
  6124.  move.w d0,ymouse
  6125.  
  6126.  clr.l d0
  6127.  clr.l d1
  6128.  move.w $a(a6),d0
  6129.  ext.w d0
  6130.  ext.l d0
  6131.  move.w d0,d3
  6132.  move.w oldmx,d2
  6133.  sub.w d2,d0
  6134.  
  6135.  cmp.w #127,d0
  6136.  blt nonegx
  6137.  move.w #255,d1
  6138.  sub.w d0,d1
  6139.  move.w d1,d0
  6140.  neg.w d0
  6141. nonegx:
  6142.  
  6143.  cmp.w #-127,d0
  6144.  bge nonegx2
  6145.  move.w #255,d1
  6146.  add.w d0,d1
  6147.  move.w d1,d0
  6148. nonegx2:
  6149.  
  6150.  add.b d0,d2
  6151.  move.w d0,d1
  6152.  move.w d2,oldmx
  6153.  
  6154.  move.w #$0,$dff034
  6155.  
  6156.  add.w d0,oldx2
  6157.  move.w oldx2,d0
  6158.  and.w #2047,d0
  6159.  move.w d0,oldx2
  6160.  
  6161.  asl.w #2,d0
  6162.  sub.w prevx,d0
  6163.  add.w d0,prevx
  6164.  add.w d0,angpos
  6165.  move.w #0,lrs
  6166.  rts
  6167.  
  6168. noturn:
  6169.  
  6170. ; got to move lr instead. 
  6171.  
  6172. ; d1 = speed moved l/r
  6173.  
  6174.  move.w d1,lrs
  6175.  
  6176.  rts
  6177.  
  6178. lrs: dc.w 0
  6179. prevx: dc.w 0
  6180.  
  6181. angpos: dc.w 0
  6182. mang: dc.w 0
  6183. oldymouse: dc.w 0
  6184. xmouse: dc.w 0
  6185. ymouse: dc.w 0
  6186. oldx2: dc.w 0
  6187. oldmx: dc.w 0
  6188. oldmy: dc.w 0
  6189. oldy2: dc.w 0
  6190.  
  6191. MAPON: dc.w $0
  6192. REALMAPON: dc.w 0
  6193.  
  6194. RotateLevelPts:
  6195.  
  6196.  tst.b REALMAPON
  6197.  beq ONLYTHELONELY
  6198.  
  6199.  move.w sinval,d6
  6200.  swap d6
  6201.  move.w cosval,d6
  6202.  move.l Points,a3
  6203.  move.l #Rotated,a1
  6204.  move.l #OnScreen,a2
  6205.  move.w xoff,d4
  6206.  asr.w #1,d4
  6207.  move.w zoff,d5
  6208.  asr.w #1,d5
  6209. ; move.w #$c40,$dff106
  6210. ; move.w #$f00,$dff180
  6211.  
  6212.  move.w NumLevPts,d7
  6213.  
  6214.  tst.b FULLSCR
  6215.  bne BIGALL
  6216.  
  6217. pointrotlop2:
  6218.  move.w (a3)+,d0
  6219.  asr.w #1,d0
  6220.  sub.w d4,d0
  6221.  move.w d0,d2
  6222.  move.w (a3)+,d1
  6223.  asr.w #1,d1
  6224.  sub.w d5,d1
  6225.  muls d6,d2
  6226.  swap d6
  6227.  move.w d1,d3
  6228.  muls d6,d3
  6229.  sub.l d3,d2
  6230. ; add.l d2,d2
  6231. ; swap d2
  6232. ; ext.l d2
  6233. ; asl.l #7,d2
  6234.  
  6235.  asr.l #7,d2
  6236.  
  6237.  add.l xwobble,d2
  6238.  move.l d2,(a1)+
  6239.  
  6240.  muls d6,d0
  6241.  swap d6
  6242.  muls d6,d1
  6243.  add.l d0,d1
  6244. ; asl.l #2,d1
  6245. ; swap d1
  6246.  
  6247.  asr.l #8,d1
  6248.  asr.l #6,d1
  6249.  
  6250.  move.l d1,(a1)+
  6251.  
  6252.  tst.l d1
  6253.  bgt.s ptnotbehind
  6254.  tst.l d2
  6255.  bgt.s onrightsomewhere
  6256.  move.w #0,d2
  6257.  bra putin
  6258. onrightsomewhere:
  6259.  move.w RIGHTX,d2
  6260.  ext.l d2
  6261.  bra putin
  6262. ptnotbehind:
  6263.  
  6264.  divs.l d1,d2
  6265.  move.w MIDDLEX,d1
  6266.  ext.l d1
  6267.  add.l d1,d2
  6268. putin:
  6269.  move.w d2,(a2)+
  6270.  
  6271.  dbra d7,pointrotlop2
  6272. outofpointrot:
  6273.   rts
  6274.  
  6275.  
  6276. BIGALL:
  6277.  
  6278. pointrotlop2B:
  6279.  move.w (a3)+,d0
  6280.  asr.w #1,d0
  6281.  sub.w d4,d0
  6282.  move.w d0,d2
  6283.  move.w (a3)+,d1
  6284.  asr.w #1,d1
  6285.  sub.w d5,d1
  6286.  muls d6,d2
  6287.  swap d6
  6288.  move.w d1,d3
  6289.  muls d6,d3
  6290.  sub.l d3,d2
  6291. ; add.l d2,d2
  6292. ; swap d2
  6293. ; ext.l d2
  6294. ; asl.l #7,d2
  6295.  asr.l #7,d2
  6296.  add.l xwobble,d2
  6297.  move.l d2,(a1)+
  6298.  
  6299.  muls d6,d0
  6300.  swap d6
  6301.  muls d6,d1
  6302.  add.l d0,d1
  6303.  
  6304.  divs.l #3,d1
  6305.  asr.l #8,d1
  6306.  asr.l #5,d1
  6307.  
  6308. ; asl.l #3,d1
  6309. ; swap d1
  6310. ; ext.l d1
  6311. ; divs #3,d1
  6312.  move.l d1,(a1)+
  6313.  
  6314.  tst.l d1
  6315.  bgt.s ptnotbehindB
  6316.  tst.l d2
  6317.  bgt.s onrightsomewhereB
  6318.  move.l #0,d2
  6319.  bra putinB
  6320. onrightsomewhereB:
  6321.  move.w RIGHTX,d2
  6322.  ext.l d2
  6323.  bra putinB
  6324. ptnotbehindB:
  6325.  
  6326.  divs.l d1,d2
  6327.  move.w MIDDLEX,d1
  6328.  ext.l d1
  6329.  add.l d1,d2
  6330. putinB:
  6331.  move.w d2,(a2)+
  6332.  
  6333.  dbra d7,pointrotlop2B
  6334.   rts
  6335.  
  6336.  
  6337. ONLYTHELONELY:
  6338.  
  6339.  move.w sinval,d6
  6340.  swap d6
  6341.  move.w cosval,d6
  6342.  
  6343.  move.l PointsToRotatePtr,a0
  6344.  move.l Points,a3
  6345.  move.l #Rotated,a1
  6346.  move.l #OnScreen,a2
  6347.  move.w xoff,d4
  6348.  move.w zoff,d5
  6349.  
  6350. ; move.w #$c40,$dff106
  6351. ; move.w #$f00,$dff180
  6352.  
  6353.  tst.b FULLSCR
  6354.  bne BIGLONELY
  6355.  
  6356. pointrotlop:
  6357.  move.w (a0)+,d7
  6358.  blt outofpointrot
  6359.  
  6360.  move.w (a3,d7*4),d0
  6361.  sub.w d4,d0
  6362.  move.w d0,d2
  6363.  move.w 2(a3,d7*4),d1
  6364.  sub.w d5,d1
  6365.  muls d6,d2
  6366.  swap d6
  6367.  move.w d1,d3
  6368.  muls d6,d3
  6369.  sub.l d3,d2
  6370.  add.l d2,d2
  6371.  swap d2
  6372.  ext.l d2
  6373.  asl.l #7,d2
  6374.  add.l xwobble,d2
  6375.  move.l d2,(a1,d7*8)
  6376.  
  6377.  muls d6,d0
  6378.  swap d6
  6379.  muls d6,d1
  6380.  add.l d0,d1
  6381.  asl.l #1,d1
  6382.  swap d1
  6383. ; ext.l d1
  6384. ; divs #3,d1
  6385.  move.l d1,4(a1,d7*8)
  6386.  
  6387.  tst.w d1
  6388.  bgt.s .ptnotbehind
  6389.  tst.w d2
  6390.  bgt.s .onrightsomewhere
  6391.  move.w #0,d2
  6392.  bra .putin
  6393. .onrightsomewhere:
  6394.  move.w RIGHTX,d2
  6395.  bra .putin
  6396. .ptnotbehind:
  6397.  
  6398.  divs d1,d2
  6399.  add.w MIDDLEX,d2
  6400. .putin:
  6401.  move.w d2,(a2,d7*2)
  6402.  
  6403.  bra pointrotlop
  6404.  
  6405. ; move.w #$c40,$dff106
  6406. ; move.w #$ff0,$dff180
  6407.  
  6408.  rts
  6409.  
  6410. BIGLONELY:
  6411.  
  6412. .pointrotlop:
  6413.  move.w (a0)+,d7
  6414.  blt.s .outofpointrot
  6415.  
  6416.  move.w (a3,d7*4),d0
  6417.  sub.w d4,d0
  6418.  move.w d0,d2
  6419.  move.w 2(a3,d7*4),d1
  6420.  sub.w d5,d1
  6421.  muls d6,d2
  6422.  swap d6
  6423.  move.w d1,d3
  6424.  muls d6,d3
  6425.  sub.l d3,d2
  6426.  add.l d2,d2
  6427.  swap d2
  6428.  ext.l d2
  6429.  asl.l #7,d2
  6430.  add.l xwobble,d2
  6431.  move.l d2,(a1,d7*8)
  6432.  
  6433.  muls d6,d0
  6434.  swap d6
  6435.  muls d6,d1
  6436.  add.l d0,d1
  6437.  asl.l #2,d1
  6438.  swap d1
  6439.  ext.l d1
  6440.  divs #3,d1
  6441.  move.l d1,4(a1,d7*8)
  6442.  
  6443.  tst.w d1
  6444.  bgt.s .ptnotbehind
  6445.  tst.w d2
  6446.  bgt.s .onrightsomewhere
  6447.  move.w #0,d2
  6448.  bra .putin
  6449. .onrightsomewhere:
  6450.  move.w RIGHTX,d2
  6451.  bra .putin
  6452. .ptnotbehind:
  6453.  
  6454.  divs d1,d2
  6455.  add.w MIDDLEX,d2
  6456. .putin:
  6457.  move.w d2,(a2,d7*2)
  6458.  
  6459.  bra .pointrotlop
  6460.  
  6461. .outofpointrot:
  6462. ; move.w #$c40,$dff106
  6463. ; move.w #$ff0,$dff180
  6464.  
  6465.  rts
  6466.  
  6467.  
  6468. PLR1_ObjDists
  6469.  ds.w 250
  6470. PLR2_ObjDists
  6471.  ds.w 250
  6472.  
  6473. CalcPLR1InLine:
  6474.  
  6475.  move.w PLR1_sinval,d5
  6476.  move.w PLR1_cosval,d6
  6477.  move.l ObjectData,a4
  6478.  move.l ObjectPoints,a0
  6479.  move.w NumObjectPoints,d7
  6480.  move.l #PLR1_ObsInLine,a2
  6481.  move.l #PLR1_ObjDists,a3
  6482.  
  6483. .objpointrotlop:
  6484.  
  6485.  cmp.b #3,16(a4)
  6486.  beq.s .itaux
  6487.  
  6488.  move.w (a0),d0
  6489.  sub.w PLR1_xoff,d0
  6490.  move.w 4(a0),d1
  6491.  addq #8,a0
  6492.  
  6493.  tst.w 12(a4)
  6494.  blt .noworkout
  6495.  
  6496.  moveq #0,d2
  6497.  move.b 16(a4),d2
  6498.  ;move.l #ColBoxTable,a6
  6499.  ;lea (a6,d2.w*8),a6
  6500.  
  6501.  sub.w PLR1_zoff,d1
  6502.  move.w d0,d2
  6503.  muls d6,d2
  6504.  move.w d1,d3
  6505.  muls d5,d3
  6506.  sub.l d3,d2
  6507.  add.l d2,d2
  6508.  
  6509.  bgt.s .okh
  6510.  neg.l d2
  6511. .okh:
  6512.  swap d2
  6513.  
  6514.  muls d5,d0
  6515.  muls d6,d1
  6516.  add.l d0,d1
  6517.  asl.l #2,d1
  6518.  swap d1
  6519.  moveq #0,d3
  6520.  
  6521.  tst.w d1
  6522.  ble.s .notinline
  6523.  asr.w #1,d2
  6524.  cmp.w #80,d2
  6525.  bgt.s .notinline
  6526.  
  6527.  st d3
  6528. .notinline
  6529.  move.b d3,(a2)+
  6530.  
  6531.  move.w d1,(a3)+
  6532.  
  6533.  add.w #64,a4
  6534.  dbra d7,.objpointrotlop
  6535.  
  6536.  rts
  6537.  
  6538. .itaux:
  6539.  add.w #64,a4
  6540.  bra .objpointrotlop
  6541.  
  6542. .noworkout:
  6543.  move.b #0,(a2)+
  6544.  move.w #0,(a3)+
  6545.  add.w #64,a4
  6546.  dbra d7,.objpointrotlop
  6547.  rts
  6548.  
  6549.  
  6550. CalcPLR2InLine:
  6551.  
  6552.  move.w PLR2_sinval,d5
  6553.  move.w PLR2_cosval,d6
  6554.  move.l ObjectData,a4
  6555.  move.l ObjectPoints,a0
  6556.  move.w NumObjectPoints,d7
  6557.  move.l #PLR2_ObsInLine,a2
  6558.  move.l #PLR2_ObjDists,a3
  6559.  
  6560. .objpointrotlop:
  6561.  
  6562.  cmp.b #3,16(a4)
  6563.  beq.s .itaux
  6564.  
  6565.  move.w (a0),d0
  6566.  sub.w PLR2_xoff,d0
  6567.  move.w 4(a0),d1
  6568.  addq #8,a0
  6569.  
  6570.  tst.w 12(a4)
  6571.  blt .noworkout
  6572.  
  6573.  moveq #0,d2
  6574.  move.b 16(a4),d2
  6575. ; move.l #ColBoxTable,a6
  6576. ; lea (a6,d2.w*8),a6
  6577.  
  6578.  sub.w PLR2_zoff,d1
  6579.  move.w d0,d2
  6580.  muls d6,d2
  6581.  move.w d1,d3
  6582.  muls d5,d3
  6583.  sub.l d3,d2
  6584.  add.l d2,d2
  6585.  
  6586.  bgt.s .okh
  6587.  neg.l d2
  6588. .okh:
  6589.  swap d2
  6590.  
  6591.  muls d5,d0
  6592.  muls d6,d1
  6593.  add.l d0,d1
  6594.  asl.l #2,d1
  6595.  swap d1
  6596.  moveq #0,d3
  6597.  
  6598.  tst.w d1
  6599.  ble.s .notinline
  6600.  asr.w #1,d2
  6601.  cmp.w (a6),d2
  6602.  bgt.s .notinline
  6603.  
  6604.  st d3
  6605. .notinline
  6606.  move.b d3,(a2)+
  6607.  
  6608.  move.w d1,(a3)+
  6609.  
  6610.  add.w #64,a4
  6611.  dbra d7,.objpointrotlop
  6612.  
  6613.  rts
  6614.  
  6615. .itaux:
  6616.  add.w #64,a4
  6617.  bra .objpointrotlop
  6618.  
  6619. .noworkout:
  6620.  move.w #0,(a3)+
  6621.  move.b #0,(a2)+
  6622.  add.w #64,a4
  6623.  dbra d7,.objpointrotlop
  6624.  rts
  6625.  
  6626.  
  6627. RotateObjectPts:
  6628.  
  6629.  move.w sinval,d5
  6630.  move.w cosval,d6
  6631.  
  6632.  move.l ObjectData,a4
  6633.  move.l ObjectPoints,a0
  6634.  move.w NumObjectPoints,d7
  6635.  move.l #ObjRotated,a1
  6636.  
  6637.  tst.b FULLSCR
  6638.  bne BIGOBJPTS
  6639.  
  6640.  
  6641. .objpointrotlop:
  6642.  
  6643.  cmp.b #3,16(a4)
  6644.  beq.s .itaux
  6645.  
  6646.  move.w (a0),d0
  6647.  sub.w xoff,d0
  6648.  move.w 4(a0),d1
  6649.  addq #8,a0
  6650.  
  6651.  tst.w 12(a4)
  6652.  blt .noworkout
  6653.  
  6654.  sub.w zoff,d1
  6655.  
  6656.  move.w d0,d2
  6657.  muls d6,d2
  6658.  move.w d1,d3
  6659.  muls d5,d3
  6660.  sub.l d3,d2
  6661.  
  6662.  
  6663.  add.l d2,d2
  6664.  swap d2
  6665.  move.w d2,(a1)+
  6666.  
  6667.  muls d5,d0
  6668.  muls d6,d1
  6669.  add.l d0,d1
  6670.  asl.l #1,d1
  6671.  swap d1
  6672. ; ext.l d1
  6673. ; divs #3,d1
  6674.  moveq #0,d3
  6675.  
  6676.  move.w d1,(a1)+
  6677.  ext.l d2
  6678.  asl.l #7,d2
  6679.  add.l xwobble,d2
  6680.  move.l d2,(a1)+
  6681.  
  6682.  dbra d7,.objpointrotlop
  6683.  
  6684.  rts
  6685.  
  6686. .itaux:
  6687.  add.w #64,a4
  6688.  bra .objpointrotlop
  6689.  
  6690. .noworkout:
  6691.   move.l #0,(a1)+
  6692.   move.l #0,(a1)+
  6693.   add.w #64,a4
  6694.   dbra d7,.objpointrotlop
  6695.   rts
  6696.   
  6697. BIGOBJPTS:
  6698.  
  6699. .objpointrotlop:
  6700.  
  6701.  cmp.b #3,16(a4)
  6702.  beq.s .itaux
  6703.  
  6704.  move.w (a0),d0
  6705.  sub.w xoff,d0
  6706.  move.w 4(a0),d1
  6707.  addq #8,a0
  6708.  
  6709.  tst.w 12(a4)
  6710.  blt .noworkout
  6711.  
  6712.  sub.w zoff,d1
  6713.  move.w d0,d2
  6714.  muls d6,d2
  6715.  move.w d1,d3
  6716.  muls d5,d3
  6717.  sub.l d3,d2
  6718.  
  6719.  
  6720.  add.l d2,d2
  6721.  swap d2
  6722.  move.w d2,(a1)+
  6723.  
  6724.  muls d5,d0
  6725.  muls d6,d1
  6726.  add.l d0,d1
  6727.  asl.l #2,d1
  6728.  swap d1
  6729.  ext.l d1
  6730.  divs #3,d1
  6731.  moveq #0,d3
  6732.  
  6733.  move.w d1,(a1)+
  6734.  ext.l d2
  6735.  asl.l #7,d2
  6736.  add.l xwobble,d2
  6737.  move.l d2,(a1)+
  6738.  sub.l xwobble,d2
  6739.  
  6740.  add.w #64,a4
  6741.  dbra d7,.objpointrotlop
  6742.  
  6743.  rts
  6744.  
  6745. .itaux:
  6746.  add.w #64,a4
  6747.  bra .objpointrotlop
  6748.  
  6749. .noworkout:
  6750.   move.l #0,(a1)+
  6751.   move.l #0,(a1)+
  6752.   add.w #64,a4
  6753.   dbra d7,.objpointrotlop
  6754.   rts
  6755.  
  6756. LightDraw:
  6757.  
  6758.  move.w (a0)+,d0
  6759.  move.w (a0)+,d1
  6760.  move.l #Rotated,a1
  6761.  move.w 6(a1,d0.w*8),d2
  6762.  ble.s oneendbehind
  6763.  move.w 6(a1,d1.w*8),d3
  6764.  bgt.s bothendsinfront
  6765.  
  6766. oneendbehind:
  6767.  rts
  6768. bothendsinfront:
  6769.  
  6770.  move.l #OnScreen,a2
  6771.  move.w (a2,d0.w*2),d0
  6772.  bge.s okleftend
  6773.  moveq #0,d0
  6774. okleftend:
  6775.  move.w (a2,d1.w*2),d1
  6776.  bgt.s somevis
  6777.  rts
  6778. somevis:
  6779.  cmp.w RIGHTX,d0
  6780.  blt.s somevis2
  6781.  rts
  6782. somevis2:
  6783.  cmp.w RIGHTX,d1
  6784.  blt.s okrightend
  6785.  move.w RIGHTX,d1
  6786.  subq #1,d1
  6787. okrightend:
  6788.  
  6789.  sub.w d0,d1
  6790.  blt.s wrongbloodywayround
  6791.  move.l TexturePal,a4
  6792.  move.l #objintocop,a1
  6793.  lea (a1,d0.w*2),a1
  6794.  
  6795.  move.l frompt,a3
  6796.  move.w #104*4,d6
  6797.  move.w #79,d2
  6798. lacross:
  6799.  move.w d2,d3
  6800.  move.l a3,a2
  6801.  adda.w (a1)+,a2
  6802. ldown:
  6803.  add.w d6,a2
  6804.  move.w (a2),d7
  6805.  move.w (a4,d7.w*2),(a2)
  6806.  dbra d3,ldown
  6807.  dbra d1,lacross
  6808.  
  6809. wrongbloodywayround:
  6810.  
  6811.  rts
  6812.  
  6813. FaceToPlace: dc.w 0
  6814.  
  6815. Cheese:
  6816.  dc.w 4,15
  6817.  
  6818. FacesList:
  6819.  dc.w 0,4*4
  6820.  dc.w 1,2*4
  6821.  dc.w 0,2*4
  6822.  dc.w 2,2*4
  6823.  dc.w 0,2*4
  6824.  dc.w 1,3*4
  6825.  dc.w 0,2*4
  6826.  dc.w 2,3*4
  6827.  dc.w 0,5*4
  6828.  dc.w 1,2*4
  6829.  dc.w 0,2*4
  6830.  dc.w 2,2*4
  6831.  dc.w 0,2*4
  6832.  dc.w 1,2*4
  6833.  dc.w 0,2*4
  6834.  dc.w 2,3*4
  6835.  dc.w 0,1*4
  6836.  dc.w 1,3*4
  6837.  dc.w 0,1*4
  6838.  dc.w 2,3*4
  6839.  dc.w 0,1*4
  6840.  
  6841. EndOfFacesList:
  6842.  
  6843. FacesPtr:
  6844.  dc.l FacesList
  6845. FacesCounter:
  6846.  dc.w 0
  6847. Expression:
  6848.  dc.w 0
  6849.  
  6850.  
  6851. Energy:
  6852.  dc.w 191
  6853. OldEnergy:
  6854.  dc.w 191
  6855. Ammo: dc.w 63
  6856. OldAmmo: dc.w 63
  6857.  
  6858. FullEnergy:
  6859. ; move.w #127,Energy
  6860. ; move.w #127,OldEnergy
  6861. ; move.l #health,a0
  6862. ; move.l #borders,a1
  6863. ; add.l #25*8*2+6,a1
  6864. ; lea 2592(a1),a2
  6865. ; move.w #127,d0
  6866. ;PutInFull:
  6867. ; move.b (a0)+,(a1)
  6868. ; move.b (a0)+,8(a1)
  6869. ; add.w #16,a1
  6870. ; move.b (a0)+,(a2)
  6871. ; move.b (a0)+,8(a2)
  6872. ; add.w #16,a2
  6873. ; dbra d0,PutInFull
  6874.  
  6875.  rts
  6876.  
  6877. ;EnergyBar:
  6878.  
  6879.  move.w Energy,d0
  6880.  bgt.s .noeneg
  6881.  move.w #0,d0
  6882. .noeneg:
  6883.  move.w d0,Energy
  6884.  
  6885.  cmp.w OldEnergy,d0
  6886.  bne.s gottochange
  6887.  
  6888. NoChange
  6889.  rts
  6890.  
  6891. gottochange:
  6892.   
  6893.  blt LessEnergy
  6894.  cmp.w #127,Energy
  6895.  blt.s NotMax
  6896.  move.w #127,Energy
  6897. NotMax:
  6898.  
  6899.  move.w Energy,d0
  6900.  move.w OldEnergy,d2
  6901.  sub.w d0,d2
  6902.  beq.s NoChange    
  6903.  neg.w d2
  6904.  
  6905.  move.w #127,d3
  6906.  sub.w d0,d3
  6907.  
  6908.  move.l #health,a0
  6909.  lea (a0,d3.w*4),a0
  6910. ; move.l #borders+25*16+6,a1
  6911.  lsl.w #4,d3
  6912.  add.w d3,a1
  6913.  lea 2592(a1),a2
  6914.  
  6915. EnergyRise:
  6916.  move.b (a0)+,(a1)
  6917.  move.b (a0)+,8(a1)
  6918.  add.w #16,a1
  6919.  move.b (a0)+,(a2)
  6920.  move.b (a0)+,8(a2)
  6921.  add.w #16,a2
  6922.  subq #1,d2
  6923.  bgt.s EnergyRise
  6924.  
  6925.  move.w Energy,OldEnergy
  6926.  
  6927.  rts 
  6928.  
  6929. LessEnergy: 
  6930.  move.w OldEnergy,d2
  6931.  sub.w d0,d2
  6932.  
  6933.  move.w #127,d3
  6934.  sub.w OldEnergy,d3
  6935.  
  6936. ; move.l #borders+25*16+6,a1
  6937.  asl.w #4,d3
  6938.  add.w d3,a1
  6939.  lea 2592(a1),a2
  6940.  
  6941. EnergyDrain:
  6942.  move.b #0,(a1)
  6943.  move.b #0,8(a1)
  6944.  move.b #0,(a2)
  6945.  move.b #0,8(a2)
  6946.  add.w #16,a1
  6947.  add.w #16,a2
  6948.  subq #1,d2
  6949.  bgt.s EnergyDrain
  6950.  
  6951.  move.w Energy,OldEnergy
  6952.  
  6953.  rts 
  6954.  
  6955. firstdigit: dc.b 0
  6956. secdigit: dc.b 0
  6957. thirddigit: dc.b 0
  6958.  
  6959.  even
  6960.  
  6961. gunny: dc.w 0
  6962.  
  6963. AmmoBar:
  6964.  
  6965. * Do guns first.
  6966.  
  6967.  move.l #borderchars,a4
  6968.  move.b p1_gunselected,d0 
  6969.  move.l #PLAYERONEGUNS,a5
  6970.  cmp.b #'s',mors
  6971.  bne.s .notplr2
  6972.  move.l #PLAYERTWOGUNS,a5
  6973.  move.b p2_gunselected,d0
  6974. .notplr2:
  6975.  
  6976.  move.b d0,gunny
  6977.  
  6978.  move.w #9,d2
  6979.  moveq #0,d0
  6980. putingunnums:
  6981.  move.w #4,d1
  6982.  move.l a4,a0
  6983.  cmp.b gunny,d0
  6984.  bne.s .notsel
  6985.  add.l #5*10*8*2,a0
  6986.  addq #2,a5
  6987.  bra.s .donesel
  6988. .notsel:
  6989.  tst.w (a5)+
  6990.  beq.s .donesel
  6991.  add.l #5*10*8,a0
  6992. .donesel:
  6993.  move.l SCRNDRAWPT,a1
  6994.  add.w d0,a1
  6995.  add.l #3+(240*40),a1
  6996.  bsr DRAWDIGIT
  6997.  addq #1,d0
  6998.  dbra d2,putingunnums
  6999.  
  7000.  move.w Ammo,d0
  7001.  
  7002.  cmp.w #999,d0
  7003.  blt.s .okammo
  7004.  move.w #999,d0 
  7005. .okammo
  7006.  
  7007.  
  7008.  ext.l d0
  7009.  divs #10,d0
  7010.  swap d0
  7011.  move.b d0,thirddigit
  7012.  swap d0
  7013.  ext.l d0
  7014.  divs #10,d0
  7015.  move.b d0,firstdigit
  7016.  swap d0
  7017.  move.b d0,secdigit
  7018.  
  7019.  move.l #borderchars+15*8*10,a0
  7020.  cmp.w #10,Ammo
  7021.  blt.s .notsmallamo
  7022.  add.l #7*8*10,a0
  7023. .notsmallamo:
  7024.  
  7025.  move.l SCRNDRAWPT,a1
  7026.  add.l #20+238*40,a1
  7027.  move.b firstdigit,d0
  7028.  move.w #6,d1
  7029.  bsr DRAWDIGIT
  7030.  
  7031.  move.l SCRNDRAWPT,a1
  7032.  add.l #21+238*40,a1
  7033.  move.b secdigit,d0
  7034.  move.w #6,d1
  7035.  bsr DRAWDIGIT
  7036.  
  7037.  move.l SCRNDRAWPT,a1
  7038.  add.l #22+238*40,a1
  7039.  move.b thirddigit,d0
  7040.  move.w #6,d1
  7041.  bsr DRAWDIGIT
  7042.  
  7043.  rts
  7044.  
  7045. EnergyBar:
  7046.  move.w Energy,d0
  7047.  bge.s .okpo
  7048.  moveq #0,d0 
  7049. .okpo:
  7050.  
  7051.  cmp.w #999,d0
  7052.  blt.s .okenergy
  7053.  move.w #999,d0 
  7054. .okenergy
  7055.  
  7056.  
  7057.  ext.l d0
  7058.  divs #10,d0
  7059.  swap d0
  7060.  move.b d0,thirddigit
  7061.  swap d0
  7062.  ext.l d0
  7063.  divs #10,d0
  7064.  move.b d0,firstdigit
  7065.  swap d0
  7066.  move.b d0,secdigit
  7067.  
  7068.  move.l #borderchars+15*8*10,a0
  7069.  cmp.w #10,Energy
  7070.  blt.s .notsmallamo
  7071.  add.l #7*8*10,a0
  7072. .notsmallamo:
  7073.  
  7074.  move.l SCRNDRAWPT,a1
  7075.  add.l #34+238*40,a1
  7076.  move.b firstdigit,d0
  7077.  move.w #6,d1
  7078.  bsr DRAWDIGIT
  7079.  
  7080.  move.l SCRNDRAWPT,a1
  7081.  add.l #35+238*40,a1
  7082.  move.b secdigit,d0
  7083.  move.w #6,d1
  7084.  bsr DRAWDIGIT
  7085.  
  7086.  move.l SCRNDRAWPT,a1
  7087.  add.l #36+238*40,a1
  7088.  move.b thirddigit,d0
  7089.  move.w #6,d1
  7090.  bsr DRAWDIGIT
  7091.  
  7092.  move.l SCRNSHOWPT,a1
  7093.  add.l #34+238*40,a1
  7094.  move.b firstdigit,d0
  7095.  move.w #6,d1
  7096.  bsr DRAWDIGIT
  7097.  
  7098.  move.l SCRNSHOWPT,a1
  7099.  add.l #35+238*40,a1
  7100.  move.b secdigit,d0
  7101.  move.w #6,d1
  7102.  bsr DRAWDIGIT
  7103.  
  7104.  move.l SCRNSHOWPT,a1
  7105.  add.l #36+238*40,a1
  7106.  move.b thirddigit,d0
  7107.  move.w #6,d1
  7108.  bsr DRAWDIGIT
  7109.  
  7110.  
  7111.  rts
  7112.  
  7113.  
  7114. DRAWDIGIT:
  7115.  ext.w d0
  7116.  lea (a0,d0.w),a2
  7117. charlines:
  7118.  lea 30720(a1),a3 
  7119.  move.b (a2),(a1)
  7120.  move.b 10(a2),10240(a1)
  7121.  move.b 20(a2),20480(a1)
  7122.  move.b 30(a2),(a3)
  7123.  move.b 40(a2),10240(a3)
  7124.  move.b 50(a2),20480(a3)
  7125.  lea 30720(a3),a3
  7126.  move.b 60(a2),(a3)
  7127.  move.b 70(a2),10240(a3)
  7128.  
  7129.  add.w #10*8,a2
  7130.  add.w #40,a1
  7131.  dbra d1,charlines
  7132.  
  7133.  rts
  7134.  
  7135. borderchars: incbin "ab3:includes/bordercharsRAW"
  7136.  
  7137. NARRATOR:
  7138.  
  7139. ; sub.w #1,NARRTIME
  7140. ; bge .NOCHARYET
  7141. ; move.w #3,NARRTIME
  7142.  
  7143.  move.l #SCROLLSCRN,d1
  7144.  move.w d1,scroll
  7145.  swap d1
  7146.  move.w d1,scrolh
  7147.  
  7148.  move.w SCROLLTIMER,d0
  7149.  subq #1,d0
  7150.  move.w d0,SCROLLTIMER
  7151.  cmp.w #40,d0
  7152.  bge .NOCHARYET
  7153.  tst.w d0
  7154.  bge.s .okcha
  7155.  
  7156.  move.w #150,SCROLLTIMER
  7157.  bra .NOCHARYET
  7158.  
  7159. .okcha:
  7160.  
  7161.  move.l #SCROLLSCRN,a0
  7162.  add.w SCROLLXPOS,a0
  7163.  
  7164.  moveq #1,d7
  7165. .doachar: 
  7166.  
  7167.  move.l SCROLLPOINTER,a1
  7168.  moveq #0,d1
  7169.  move.b (a1)+,d1    ; character
  7170.  move.l a1,d2
  7171.  cmp.l ENDSCROLL,d2
  7172.  blt.s .notrestartscroll
  7173.  move.l #BLANKSCROLL,a1
  7174.  move.l #BLANKSCROLL+80,ENDSCROLL
  7175. .notrestartscroll
  7176.  move.l a1,SCROLLPOINTER
  7177.  
  7178.  move.l #SCROLLCHARS,a1
  7179.  asl.w #3,d1
  7180.  add.w d1,a1
  7181.  
  7182.  move.b (a1)+,(a0)
  7183.  move.b (a1)+,80(a0)
  7184.  move.b (a1)+,80*2(a0)
  7185.  move.b (a1)+,80*3(a0)
  7186.  move.b (a1)+,80*4(a0)
  7187.  move.b (a1)+,80*5(a0)
  7188.  move.b (a1)+,80*6(a0)
  7189.  move.b (a1)+,80*7(a0)
  7190.  
  7191.  addq #1,a0
  7192.  dbra d7,.doachar
  7193.  
  7194.  move.w SCROLLXPOS,d0
  7195.  addq #2,d0
  7196.  move.w d0,SCROLLXPOS
  7197.  cmp.w #80,d0
  7198.  blt .NOCHARYET
  7199.  move.w #0,SCROLLXPOS
  7200.  
  7201. .NOCHARYET:
  7202.  rts
  7203.  
  7204. ; cmp.w OldAmmo,d0
  7205. ; bne.s .gottochange
  7206.  
  7207. NARRTIME: dc.w 5
  7208.  
  7209. SCROLLCHARS: incbin "ab3:includes/scrollfont"
  7210.  
  7211. .NoChange
  7212.  rts
  7213.  
  7214. .gottochange:
  7215.   
  7216.  blt LessAmmo
  7217.  cmp.w #63,Ammo
  7218.  blt.s .NotMax
  7219.  move.w #63,Ammo
  7220. .NotMax:
  7221.  
  7222.  move.w Ammo,d0
  7223.  move.w OldAmmo,d2
  7224.  sub.w d0,d2
  7225.  beq.s .NoChange
  7226.  neg.w d2
  7227.  
  7228.  move.w #63,d3
  7229.  sub.w d0,d3
  7230.  
  7231.  move.l #Ammunition,a0
  7232.  lea (a0,d3.w*8),a0
  7233. ; move.l #borders+5184+25*16+1,a1
  7234.  lsl.w #5,d3
  7235.  add.w d3,a1
  7236.  lea 2592(a1),a2
  7237.  
  7238. AmmoRise:
  7239.  move.b (a0)+,(a1)
  7240.  move.b (a0)+,8(a1)
  7241.  add.w #16,a1
  7242.  move.b (a0)+,(a2)
  7243.  move.b (a0)+,8(a2)
  7244.  add.w #16,a2
  7245.  move.b (a0)+,(a1)
  7246.  move.b (a0)+,8(a1)
  7247.  add.w #16,a1
  7248.  move.b (a0)+,(a2)
  7249.  move.b (a0)+,8(a2)
  7250.  add.w #16,a2
  7251.  subq #1,d2
  7252.  bgt.s AmmoRise
  7253.  
  7254.  move.w Ammo,OldAmmo
  7255.  
  7256.  rts 
  7257.  
  7258.  
  7259. LessAmmo: 
  7260.  move.w OldAmmo,d2
  7261.  sub.w d0,d2
  7262.  
  7263.  move.w #63,d3
  7264.  sub.w OldAmmo,d3
  7265.  
  7266. ; move.l #borders++5184+25*16+1,a1
  7267.  asl.w #5,d3
  7268.  add.w d3,a1
  7269.  lea 2592(a1),a2
  7270.  
  7271. AmmoDrain:
  7272.  move.b #0,(a1)
  7273.  move.b #0,8(a1)
  7274.  move.b #0,(a2)
  7275.  move.b #0,8(a2)
  7276.  add.w #16,a1
  7277.  add.w #16,a2
  7278.  move.b #0,(a1)
  7279.  move.b #0,8(a1)
  7280.  move.b #0,(a2)
  7281.  move.b #0,8(a2)
  7282.  add.w #16,a1
  7283.  add.w #16,a2
  7284.  subq #1,d2
  7285.  bgt.s AmmoDrain
  7286.  
  7287.  move.w Ammo,OldAmmo
  7288.  
  7289.  rts 
  7290.  
  7291. nulop:
  7292.  move.w #$0010,$dff000+intreq
  7293.  rte
  7294.  
  7295. doanything: dc.w 0
  7296.  
  7297. end:
  7298. ;     _break #0
  7299.  
  7300.  move.l #$dff000,a6
  7301.  clr.b dosounds
  7302.  clr.b doanything
  7303. waitfortop22:
  7304.  btst.b #0,intreqrl(a6)
  7305.  beq waitfortop22
  7306. waitfortop222:
  7307.  btst.b #0,intreqrl(a6)
  7308.  beq waitfortop222
  7309.  move.w #$f,$dff000+dmacon
  7310.  
  7311.  
  7312.  move.w PLAYERONEHEALTH,Energy
  7313.  cmp.b #'s',mors
  7314.  bne.s .notsl
  7315.  move.w PLAYERTWOHEALTH,Energy
  7316. .notsl:
  7317.  
  7318.  move.l drawpt,d0
  7319.  move.l olddrawpt,drawpt
  7320.  move.l d0,olddrawpt
  7321.  
  7322. ; cmp.b #'b',Prefsfile+3
  7323. ; bne.s .noback
  7324. ; jsr mt_end
  7325. ;.noback
  7326.  
  7327.  tst.w Energy
  7328.  bgt.s wevewon
  7329.  move.w #0,Energy
  7330.  bsr EnergyBar
  7331.  
  7332.  move.l #gameover,mt_data
  7333.  st UseAllChannels
  7334.  clr.b reachedend
  7335.  jsr mt_init
  7336. playgameover:
  7337.  move.l #$dff000,a6
  7338. waitfortop2:
  7339.  
  7340.     
  7341.  btst.b #0,intreqrl(a6)
  7342.  beq waitfortop2
  7343.  move.w #$1,intreq(a6)
  7344.  
  7345.     
  7346.  jsr mt_music
  7347.  
  7348.  
  7349.     
  7350.  tst.b reachedend
  7351.  beq.s playgameover
  7352.  
  7353.  bra wevelost
  7354.  
  7355.  
  7356. wevewon:
  7357.  
  7358.  move.w #$f,$dff000+dmacon
  7359.  
  7360.  bsr EnergyBar
  7361.  
  7362.  cmp.b #'n',mors
  7363.  bne.s .nonextlev
  7364.  add.w #1,MAXLEVEL
  7365.  st FINISHEDLEVEL
  7366.  
  7367. .nonextlev:
  7368.  
  7369.  move.l #welldone,mt_data
  7370.  st UseAllChannels
  7371.  clr.b reachedend
  7372.  
  7373.  jsr mt_init
  7374. playwelldone:
  7375.  move.l #$dff000,a6
  7376. waitfortop3:
  7377.  btst.b #0,intreqrl(a6)
  7378.  beq waitfortop3
  7379.  move.w #$1,intreq(a6)
  7380.  
  7381.  jsr mt_music
  7382.  
  7383.  tst.b reachedend
  7384.  beq.s playwelldone
  7385.  
  7386.  cmp.b #'n',mors
  7387.  bne.s wevelost
  7388.  cmp.w #16,MAXLEVEL
  7389.  bne.s wevelost
  7390.  
  7391.  jmp ENDGAMESCROLL
  7392.  
  7393. wevelost:
  7394.  
  7395.  move.w #$f,$dff000+dmacon
  7396.  PROTICHECK a0
  7397.  
  7398.  jmp closeeverything 
  7399.  
  7400. endnomusic
  7401.  clr.b doanything
  7402.  
  7403.  
  7404. ; cmp.b #'b',Prefsfile+3
  7405. ; bne.s .noback
  7406. ; jsr mt_end
  7407. ;.noback
  7408. *******************************
  7409. ; cmp.b #'n',mors
  7410. ; bne.s .nonextlev
  7411. ; cmp.w #15,MAXLEVEL
  7412. ; bge.s .nonextlev
  7413. ; add.w #1,MAXLEVEL
  7414. ; st FINISHEDLEVEL
  7415. ;.nonextlev:
  7416. ******************************
  7417.  
  7418.  jmp closeeverything
  7419.  
  7420. do32:
  7421.  move.w #31,d7
  7422.  move.w #$180,d1
  7423. across:
  7424.  move.w d1,(a1)+
  7425.  move.w d1,(a3)+
  7426.  move.w #0,(a1)+ 
  7427.  move.w #0,(a3)+
  7428.  add.w #2,d1
  7429.  dbra d7,across
  7430.  rts
  7431.  
  7432. ;string:
  7433. ;    dc.b    'credits',0
  7434.  
  7435. ENDGAMESCROLL:
  7436.  move.l LEVELMUSIC,mt_data
  7437.  clr.b UseAllChannels
  7438.  jsr mt_init
  7439.  
  7440.  move.w #$fff,MIXCOLL
  7441.  
  7442.  move.w #$1cc1,BOTOFTXT
  7443.  
  7444.  jsr CLRTWEENSCRN
  7445.  
  7446.  move.l #TEXTCOP,$dff080
  7447.  
  7448.  move.l #ENDGAMETEXTy,a0
  7449.  
  7450.  
  7451. SCROLLUP16LINES:
  7452.  
  7453.  move.w #15,d0
  7454.  
  7455. do16
  7456.  move.l #$dff000,a6
  7457.  
  7458.  move.w #0,d6
  7459.  move.w #7,d7
  7460.  
  7461.  move.l #SCROLLSHADES,a5
  7462.  
  7463. fadeupp:
  7464.  
  7465.  move.w (a5,d6.w*2),TOPCOLL
  7466.  move.w (a5,d7.w*2),TXTCOLL
  7467.  
  7468.  
  7469. .wtup
  7470.  btst #5,intreqrl(a6)
  7471.  beq.s .wtup
  7472.  move.w #$20,intreq(a6)
  7473.  
  7474.  jsr mt_music
  7475.  
  7476.  add.w #1,d6
  7477.  sub.w #1,d7
  7478.  bne fadeupp
  7479.  
  7480. .wtup2
  7481.  btst #5,intreqrl(a6)
  7482.  beq.s .wtup2
  7483.  move.w #$20,intreq(a6)
  7484.  
  7485.  move.w #0,TOPCOLL
  7486.  move.w #$fff,TXTCOLL
  7487.  
  7488.  WB
  7489.  
  7490.  move.l TEXTSCRN,d1
  7491.  move.l d1,bltdpt(a6)
  7492.  add.l #80,d1
  7493.  move.l d1,bltapt(a6)
  7494.  move.w #$09f0,bltcon0(a6)
  7495.  move.w #$0,bltcon1(a6)
  7496.  move.w #0,bltdmod(a6)
  7497.  move.w #0,bltamod(a6)
  7498.  move.l #-1,bltafwm(a6)
  7499.  
  7500.  move.w #255*64+40,bltsize(a6)
  7501.  
  7502.  WB
  7503.  
  7504.  dbra d0,do16
  7505.  
  7506.  move.l TEXTSCRN,a1
  7507.  move.w #15,d0
  7508.  jsr DRAWLINEOFTEXT
  7509.  
  7510.  add.l #82,a0
  7511.  cmp.l #ENDENDGAMETEXT,a0
  7512.  blt SCROLLUP16LINES
  7513.  
  7514.  move.l #ENDGAMETEXTy,a0
  7515.  bra SCROLLUP16LINES
  7516.  
  7517. SCROLLSHADES:
  7518.  dc.w 0
  7519.  dc.w $333
  7520.  dc.w $666
  7521.  dc.w $888
  7522.  dc.w $aaa
  7523.  dc.w $ccc
  7524.  dc.w $ddd
  7525.  dc.w $eee
  7526.  
  7527. ENDGAMETEXTy:
  7528. ;          12345678901234567890123456789012345678901234567890123456789012345678901234567890
  7529.  dc.b 0,0,"                                                                                "
  7530.  dc.b 0,1,"As the beast and its four servants die, a breathless silence falls, broken      "
  7531.  dc.b 0,1,"only by the hammering of my own heart in my chest.                              "
  7532.  dc.b 0,1,"I run to the now open exit, and out into the maze of corridors through which I  "
  7533.  dc.b 0,1,"came. I encounter many, many aliens, lying twitching on the ground, or utterly  "
  7534.  dc.b 0,1,"still with glazed eyes and green froth drying on their lips. Many seem to have  "
  7535.  dc.b 0,1,"turned their weapons on themselves, unable to bear either the pain or the       "
  7536.  dc.b 0,1,"sudden silence in their minds.                                                  "
  7537.  dc.b 0,0,"                                                                                "
  7538.  dc.b 0,1,"It takes me several hours to locate a working teleport to take me back aboard   "
  7539.  dc.b 0,1,"the orbiting alien ship. The scene there is the same; hordes of aliens, either  "
  7540.  dc.b 0,1,"dead or catatonic, I cannot tell.                                               "
  7541.  dc.b 0,1,"I walk slowly, exhausted, back to the INDOMITABLE, averting my eyes from the    "
  7542.  dc.b 0,1,"pitiful scenes around me. I know that my work is not finished yet.              "
  7543.  dc.b 0,1,"Once aboard, I make my way to the bridge. I manage to restart the main power    "
  7544.  dc.b 0,1,"generators and get basic navigation back on-line. Working from the memories     "
  7545.  dc.b 0,1,"implanted by the dying marine, I painstakingly program the computer to deal     "
  7546.  dc.b 0,1,"the killing blow to the enemy. At last the task is finished. The ship hums into "
  7547.  dc.b 0,1,"life, accellerating slowly out of orbit, towing the massive alien craft and     "
  7548.  dc.b 0,1,"its mindless cargo behind it.                                                   "
  7549.  dc.b 0,1,"As the image of the alien sun grows in the viewscreen, I think about what I     "
  7550.  dc.b 0,1,"have seen. Fragments of technology, stolen from civilisations - how long ago?   "
  7551.  dc.b 0,1,"How long since they were exterminated by these parasites? And how many more     "
  7552.  dc.b 0,1,"if they are allowed to continue?                                                "
  7553.  dc.b 0,1,"The sun looms hideously large before me, seeming at the last moment to slip to  "
  7554.  dc.b 0,1,"one side as the cruiser slingshots itself through the immense gravity well,     "
  7555.  dc.b 0,1,"its speed doubling and doubling again. The ship shudders and groans as the      "
  7556.  dc.b 0,1,"ponderous mass of the alien ship tries to tear itself free. I feel a distant    "
  7557.  dc.b 0,1,"twinge of curiosity as to whether it will succeed.                              "
  7558.  dc.b 0,1,"The navigation computer chatters quietly to itself as it makes tiny             "
  7559.  dc.b 0,1,"course corrections, bringing the payload to bear on its target. I only sit,     "
  7560.  dc.b 0,1,"watching blankly as we hurtle back towards the planet. The navicom beeps        "
  7561.  dc.b 0,1,"quietly to signal the blowing of the explosive bolts holding the docking ring.  "
  7562.  dc.b 0,1,"So great is our speed that the alien ship does not receed, but simply vanishes  "
  7563.  dc.b 0,1,"from sight, tracked only on the readouts of the computers in front of me.       "
  7564.  dc.b 0,1,"One readout in particular occupies my attention. Red numbers spin towards zero  "
  7565.  dc.b 0,1,"as my invisible agent of destruction spins towards oblivion. Three digits, now  "
  7566.  dc.b 0,1,"two, and now only one. I shift my attention to the image of the alien world,    "
  7567.  dc.b 0,1,"receeding behind my ship.                                                       "
  7568.  dc.b 0,0,"                                                                                "
  7569.  dc.b 0,1,"Three...                                                                        "
  7570.  dc.b 0,0,"                                                                                "
  7571.  dc.b 0,1,"Two...                                                                          "
  7572.  dc.b 0,0,"                                                                                "
  7573.  dc.b 0,1,"One...                                                                          "
  7574.  dc.b 0,0,"                                                                                "
  7575.  dc.b 0,1,"Zero.                                                                           "
  7576.  dc.b 0,0,"                                                                                "
  7577.  dc.b 0,0,"                                                                                "
  7578.  dc.b 0,0,"                                                                                "
  7579.  dc.b 0,0,"                                                                                "
  7580.  dc.b 0,1,"Travelling at nearly a quarter of the speed of light, the alien ship smashed    "
  7581.  dc.b 0,1,"into the planet, flashing past the useless orbital defences which should have   "
  7582.  dc.b 0,1,"neutralized it millions of miles earlier. It passed through the twenty miles    "
  7583.  dc.b 0,1,"of atmosphere in a little more than one ten-thousandth of a second. The air     "
  7584.  dc.b 0,1,"directly beneath had no time to be pushed out of the way, and in another        "
  7585.  dc.b 0,1,"tenth of a second it was a molecule-thick layer a thousand miles below the      "
  7586.  dc.b 0,1,"planet's surface.                                                               "
  7587.  dc.b 0,1,"Such was the heat and pressure caused by the impact, that part of the molten    "
  7588.  dc.b 0,1,"core of the planet underwent nuclear fusion, vapourising thousands of billions  "
  7589.  dc.b 0,1,"of tonnes of surrounding material. This expanding superhot plasma cloud forced  "
  7590.  dc.b 0,1,"its way up through the mantle and crust, fracturing the surface of the planet,  "
  7591.  dc.b 0,1,"blowing continent-sized chunks into space and heating the tortured atmosphere   "
  7592.  dc.b 0,1,"to ignition point. Within two minutes of impact, the doomed planet was a        "
  7593.  dc.b 0,1,"misshapen, incandescent ball, with burning fragments spinning deceptively       "
  7594.  dc.b 0,1,"slowly in their brief orbits before re-impacting with fantastic, majestic       "
  7595.  dc.b 0,1,"force.                                                                          "
  7596.  dc.b 0,0,"                                                                                "
  7597.  dc.b 0,0,"                                                                                "
  7598.  dc.b 0,0,"                                                                                "
  7599.  dc.b 0,0,"                                                                                "
  7600.  dc.b 0,1,"In a matter of weeks, the small amount of matter which had undergone fusion     "
  7601.  dc.b 0,1,"burned itself out, but the planet still glowed sullenly from a million cracks   "
  7602.  dc.b 0,1,"and holes in the crust, as it would continue to do for millions of years to     "
  7603.  dc.b 0,1,"come. The world was barren and dead, and the creatures who once roamed its      "
  7604.  dc.b 0,1,"surface no more than a memory in the mind of one man, sleeping dreamlessly      "
  7605.  dc.b 0,1,"as the invisible speck of his ship sped silently on, towards home.              "
  7606.  dc.b 0,0,"                                                                                "
  7607.  dc.b 0,0,"                                                                                "
  7608.  dc.b 0,0,"                                                                                "
  7609.  dc.b 0,0,"                                                                                "
  7610.  dc.b 0,0,"                                                                                "
  7611.  dc.b 0,0,"                                                                                "
  7612.  dc.b 0,0,"                                                                                "
  7613.  dc.b 0,0,"                                                                                "
  7614.  dc.b 0,0,"                                                                                "
  7615.  dc.b 0,0,"                                                                                "
  7616.  dc.b 0,0,"                                                                                "
  7617.  dc.b 0,0,"                                                                                "
  7618.  dc.b 0,0,"                                                                                "
  7619.  dc.b 0,0,"                                                                                "
  7620.  dc.b 0,0,"                                                                                "
  7621.  dc.b 0,0,"                                                                                "
  7622.  dc.b 0,1,"ALIEN BREED 3D II                                                               "
  7623.  dc.b 0,1,"THE KILLING GROUNDS                                                             "
  7624.  dc.b 0,0,"                                                                                "
  7625.  dc.b 0,0,"                                                                                "
  7626.  dc.b 0,1,"A Team 17 Game                                                                  "
  7627.  dc.b 0,0,"                                                                                "
  7628.  dc.b 0,1,"Produced in association with OCEAN Software                                     "
  7629.  dc.b 0,0,"                                                                                "
  7630.  dc.b 0,0,"                                                                                "
  7631.  dc.b 0,1,"Game Design, Game Code, Editor Code and In-Game Text                            "
  7632.  dc.b 0,0,"                                                                                "
  7633.  dc.b 0,1,"Andrew Clitheroe                                                                "
  7634.  dc.b 0,0,"                                                                                "
  7635.  dc.b 0,0,"                                                                                "
  7636.  dc.b 0,1,"Graphics                                                                        "
  7637.  dc.b 0,0,"                                                                                "
  7638.  dc.b 0,1,"Michael Green                                                                   "
  7639.  dc.b 0,0,"                                                                                "
  7640.  dc.b 0,0,"                                                                                "
  7641.  dc.b 0,1,"3D Object Designs, 3D Editors, Serial and OS code                               "
  7642.  dc.b 0,0,"                                                                                "
  7643.  dc.b 0,1,"Charles Blessing                                                                "
  7644.  dc.b 0,0,"                                                                                "
  7645.  dc.b 0,0,"                                                                                "
  7646.  dc.b 0,1,"Music                                                                           "
  7647.  dc.b 0,0,"                                                                                "
  7648.  dc.b 0,1,"Ben Chanter                                                                     "
  7649.  dc.b 0,0,"                                                                                "
  7650.  dc.b 0,0,"                                                                                "
  7651.  dc.b 0,1,"Project Manager                                                                 "
  7652.  dc.b 0,0,"                                                                                "
  7653.  dc.b 0,1,"Phil Quirke-Webster                                                             "
  7654.  dc.b 0,0,"                                                                                "
  7655.  dc.b 0,0,"                                                                                "
  7656.  dc.b 0,1,"Playtesting                                                                     "
  7657.  dc.b 0,0,"                                                                                "
  7658.  dc.b 0,1,"Phil and the Wolves                                                             "
  7659.  dc.b 0,0,"                                                                                "
  7660.  dc.b 0,0,"                                                                                "
  7661.  dc.b 0,1,"Additional Graphics                                                             "
  7662.  dc.b 0,0,"                                                                                "
  7663.  dc.b 0,1,"Pete Lyons                                                                      "
  7664.  dc.b 0,0,"                                                                                "
  7665.  dc.b 0,0,"                                                                                "
  7666.  
  7667.  
  7668. ENDENDGAMETEXT:
  7669.  
  7670.  
  7671. ;
  7672. ;    move.l    4.w,a6
  7673. ;    move.l    #string,d1
  7674. ;    moveq    #0,d2
  7675. ;    moveq    #0,d3
  7676. ;    jsr    _LVOExecute(a6)
  7677.  
  7678. ; include "endscroll.s"
  7679.  
  7680. ***********************************
  7681.  include "ab3:source_4000/CD32JOY"
  7682.  
  7683.  
  7684.  
  7685. *************************************
  7686. * Set left and right clip values
  7687. *************************************
  7688.  
  7689.  
  7690.  
  7691. NEWsetlclip:
  7692.  move.l #OnScreen,a1
  7693.  move.l #Rotated,a2
  7694.  move.l CONNECT_TABLE,a3
  7695.  move.l Points,a4
  7696.  
  7697.  move.w (a0),d0
  7698.  bge.s .notignoreleft
  7699.  
  7700. ; move.l #0,(a6)
  7701.  
  7702.  bra .leftnotoktoclip
  7703. .notignoreleft:
  7704.  
  7705.  move.w 6(a2,d0*8),d3    ; left z val
  7706.  bgt.s .leftclipinfront
  7707.  addq #2,a0
  7708.  rts
  7709.  
  7710.  tst.w 6(a2,d0*8)
  7711.  bgt.s .leftnotoktoclip
  7712. .ignoreboth:
  7713. ; move.l #0,(a6)
  7714. ; move.l #96*65536,4(a6)
  7715.  move.w #0,leftclip
  7716.  move.w RIGHTX,rightclip
  7717.  addq #8,a6
  7718.  addq #2,a0
  7719.  rts
  7720.  
  7721. .leftclipinfront:
  7722.  move.w (a1,d0*2),d1    ; left x on screen
  7723.  move.w (a0),d2
  7724.  move.w 2(a3,d2.w*4),d2
  7725.  move.w (a1,d2.w*2),d2
  7726.  cmp.w d1,d2
  7727.  bgt.s .leftnotoktoclip
  7728.  
  7729.  
  7730. *************************************
  7731.  
  7732. ; move.w 2(a3,d0.w*4),d6
  7733. ; move.w (a4,d0.w*4),d2
  7734. ; move.w 2(a4,d0.w*4),d3
  7735. ; move.w (a4,d6.w*4),d4
  7736. ; move.w 2(a4,d6.w*4),d5
  7737. ;
  7738. ; sub.w d2,d4    ;dx
  7739. ; sub.w d3,d5    ;dz
  7740. ; move.w xoff,d0
  7741. ; move.w zoff,d6
  7742. ; sub.w d2,d0
  7743. ; sub.w d3,d6
  7744. ; muls d0,d4
  7745. ; muls d6,d5
  7746. ; add.l d4,d5
  7747. ; bge.s .leftnotoktoclip
  7748.  
  7749. *************************************
  7750.  
  7751.  
  7752.  
  7753. ; move.w d1,(a6)
  7754. ; move.w d3,2(a6)
  7755.  cmp.w leftclip,d1
  7756.  ble.s .leftnotoktoclip
  7757.  move.w d1,leftclip
  7758. .leftnotoktoclip:
  7759.  
  7760.  addq #2,a0
  7761.  
  7762.  rts
  7763.  
  7764. NEWsetrclip
  7765.  move.l #OnScreen,a1
  7766.  move.l #Rotated,a2
  7767.  move.l CONNECT_TABLE,a3
  7768.  move.w (a0),d0
  7769.  bge.s .notignoreright
  7770. ; move.w #96,4(a6)
  7771. ; move.w #0,6(a6)
  7772.  move.w #0,d4
  7773.  bra .rightnotoktoclip
  7774. .notignoreright:
  7775.  move.w 6(a2,d0*8),d4    ; right z val
  7776.  bgt.s .rightclipinfront
  7777. ; move.w #96,4(a6)
  7778. ; move.w #0,6(a6)
  7779.  bra.s .rightnotoktoclip
  7780.  
  7781. .rightclipinfront:
  7782.  move.w (a1,d0*2),d1    ; right x on screen
  7783.  move.w (a0),d2
  7784.  move.w (a3,d2.w*4),d2
  7785.  move.w (a1,d2.w*2),d2
  7786.  cmp.w d1,d2
  7787.  blt.s .rightnotoktoclip
  7788. ; move.w d1,4(a6)
  7789. ; move.w d4,6(a6)
  7790.  
  7791.  
  7792. *************************************
  7793.  
  7794. ; move.w (a3,d0.w*4),d6
  7795. ; move.w (a4,d0.w*4),d2
  7796. ; move.w 2(a4,d0.w*4),d3
  7797. ; move.w (a4,d6.w*4),d4
  7798. ; move.w 2(a4,d6.w*4),d5
  7799. ;
  7800. ; sub.w d2,d4    ;dx
  7801. ; sub.w d3,d5    ;dz
  7802. ; move.w xoff,d0
  7803. ; move.w zoff,d6
  7804. ; sub.w d2,d0
  7805. ; sub.w d3,d6
  7806. ; muls d0,d4
  7807. ; muls d6,d5
  7808. ; add.l d4,d5
  7809. ; ble.s .rightnotoktoclip
  7810.  
  7811. *************************************
  7812.  
  7813.  
  7814.  
  7815.  cmp.w rightclip,d1
  7816.  bge.s .rightnotoktoclip
  7817.  addq #1,d1
  7818.  move.w d1,rightclip
  7819. .rightnotoktoclip:
  7820.  addq #8,a6
  7821.  addq #2,a0
  7822.  rts
  7823.  
  7824. FIRSTsetlrclip:
  7825.  move.l #OnScreen,a1
  7826.  move.l #Rotated,a2
  7827.  
  7828.  move.w (a0)+,d0
  7829.  bge.s .notignoreleft
  7830.  bra .leftnotoktoclip
  7831. .notignoreleft:
  7832.  
  7833.  move.w 6(a2,d0*8),d3    ; left z val
  7834.  bgt.s .leftclipinfront
  7835.  
  7836.  move.w (a0),d0
  7837.  blt.s .ignoreboth
  7838.  tst.w 6(a2,d0*8)
  7839.  bgt.s .leftnotoktoclip
  7840. .ignoreboth
  7841.  move.w RIGHTX,rightclip
  7842.  move.w #0,leftclip
  7843.  addq #2,a0
  7844.  rts
  7845.  
  7846. .leftclipinfront:
  7847.  move.w (a1,d0*2),d1    ; left x on screen
  7848.  cmp.w leftclip,d1
  7849.  ble.s .leftnotoktoclip
  7850.  move.w d1,leftclip
  7851. .leftnotoktoclip:
  7852.  
  7853.  move.w (a0)+,d0
  7854.  bge.s .notignoreright
  7855.  move.w #0,d4
  7856.  bra .rightnotoktoclip
  7857. .notignoreright:
  7858.  move.w 6(a2,d0*8),d4    ; right z val
  7859.  ble.s .rightnotoktoclip
  7860.  
  7861. .rightclipinfront:
  7862.  move.w (a1,d0*2),d1    ; right x on screen
  7863.  addq #1,d1
  7864.  cmp.w rightclip,d1
  7865.  bge.s .rightnotoktoclip
  7866.  move.w d1,rightclip
  7867. .rightnotoktoclip:
  7868.  
  7869. ; move.w leftclip,d0
  7870. ; move.w rightclip,d1
  7871. ; cmp.w d0,d1
  7872. ; bge.s .noswap
  7873. ; move.w #192,rightclip
  7874. ; move.w #0,leftclip
  7875. ;.noswap:
  7876.  
  7877.  rts
  7878.  
  7879.  
  7880. leftclip2: dc.w 0
  7881. rightclip2: dc.w 0
  7882. ZoneBright: dc.w 0
  7883.  
  7884. npolys: dc.w 0
  7885.  
  7886. PLR1_fire: dc.b 0
  7887. PLR2_fire: dc.b 0
  7888.  
  7889. *****************************************************
  7890.  
  7891.  
  7892. pastdata:
  7893. ***********************************
  7894. * This routine animates brightnesses.
  7895.  
  7896.  
  7897. liftpt: dc.l liftanimtab
  7898.  
  7899. brightpt:
  7900.  dc.l brightanimtab
  7901.  
  7902.  
  7903. liftanim:
  7904.  rts
  7905.  
  7906. ******************************
  7907.  include "ab3:source_4000/ObjectMove"
  7908.  include "ab3:source_4000/newAnims"
  7909.  include "ab3:source_4000/airoutine.s"
  7910. ******************************
  7911. startpass:
  7912. ; include "ab3:source_4000/password_reloc.s"
  7913. endpass:
  7914.  
  7915. rotanimpt: dc.w 0
  7916. xradd: dc.w 5
  7917. yradd: dc.w 8
  7918. xrpos: dc.w 320
  7919. yrpos: dc.w 320
  7920.  
  7921. rotanim:
  7922.  rts
  7923.  
  7924. option:
  7925.  dc.l 0,0
  7926.  
  7927. ********** WALL STUFF *******************************
  7928.  
  7929.  include "AB3:source_4000/hireswall.s"
  7930.  include "AB3:source_4000/hiresgourwall.s"
  7931.  
  7932. *****************************************************
  7933.  
  7934. ******************************************
  7935. * floor polygon
  7936.  
  7937. numsidestd: dc.w 0
  7938. bottomline: dc.w 0
  7939.  
  7940. checkforwater:
  7941.  tst.b usewater
  7942.  beq.s .notwater
  7943.  
  7944.  move.l Roompt,a1
  7945.  move.w (a1),d7
  7946.  cmp.w currzone,d7
  7947.  bne.s .notwater
  7948.  
  7949.  move.b #$f,fillscrnwater
  7950.  
  7951. .notwater:
  7952.  move.w (a0)+,d6    ; sides-1
  7953.  add.w d6,d6
  7954.  add.w d6,a0
  7955.  add.w #4+6,a0
  7956.  rts
  7957.  
  7958.  rts
  7959.  
  7960. ;NewCornerBuff:
  7961. ; ds.l 100
  7962. CLRNOFLOOR: dc.w 0
  7963.  
  7964. itsafloordraw:
  7965.  
  7966. * If D0 =1 then its a floor otherwise (=2) it's
  7967. * a roof.
  7968.  
  7969.  move.w #0,above
  7970.  move.w (a0)+,d6    ; ypos of poly
  7971.  
  7972.  tst.b usewater
  7973.  beq.s .oknon
  7974.  tst.b DOANYWATER
  7975.  beq dontdrawreturn
  7976. .oknon
  7977.  
  7978.  move.w d6,d7
  7979.  ext.l d7
  7980.  asl.l #6,d7
  7981.  cmp.l TOPOFROOM,d7
  7982.  blt checkforwater
  7983.  cmp.l BOTOFROOM,d7
  7984.  bgt.s dontdrawreturn
  7985.  
  7986.  move.w leftclip,d7
  7987.  cmp.w rightclip,d7
  7988.  bge.s dontdrawreturn
  7989.  
  7990.  sub.w flooryoff,d6
  7991.  bgt.s below
  7992.  blt.s aboveplayer
  7993.  
  7994.  tst.b usewater
  7995.  beq.s .notwater
  7996.  
  7997.  move.l Roompt,a1
  7998.  move.w (a1),d7
  7999.  cmp.w currzone,d7
  8000.  
  8001.  bne.s .notwater
  8002.  
  8003.  st fillscrnwater
  8004.  
  8005. .notwater:
  8006.  
  8007.  
  8008. dontdrawreturn:
  8009.  move.w (a0)+,d6    ; sides-1
  8010.  add.w d6,d6
  8011.  add.w d6,a0
  8012.  add.w #4+6,a0
  8013.  rts
  8014. aboveplayer:
  8015.  
  8016.  tst.b usewater
  8017.  beq.s .notwater
  8018.  
  8019.  move.l Roompt,a1
  8020.  move.w (a1),d7
  8021.  cmp.w currzone,d7
  8022.  bne.s .notwater
  8023.  
  8024.  move.b #$f,fillscrnwater
  8025.  
  8026. .notwater:
  8027.  
  8028.  btst #1,d0
  8029.  beq.s dontdrawreturn
  8030.  move.w MIDDLEY,d7
  8031.  sub.w topclip,d7 
  8032.  ble.s dontdrawreturn
  8033.  move.w #1,d0
  8034.  move.w d0,above
  8035.  neg.w d6
  8036.  bra.s notbelow
  8037. below:
  8038.  move.w botclip,d7
  8039.  sub.w MIDDLEY,d7
  8040.  ble.s dontdrawreturn
  8041. notbelow:
  8042.  btst #0,d0
  8043.  beq.s dontdrawreturn
  8044.  move.w d6,distaddr
  8045.  muls #64,d6
  8046.  move.l d6,ypos
  8047.  ext.l d7
  8048.  divs.l d7,d6        ; zpos of bottom
  8049.             ; visible line
  8050.  
  8051.  beq dontdrawreturn
  8052.  
  8053.  cmp.l #32767,d6
  8054.  bgt dontdrawreturn
  8055.             
  8056.  move.w d6,minz
  8057.  move.w d7,bottomline
  8058.  
  8059. ; Go round each point finding out
  8060. ; if it should be visible or not.
  8061.  
  8062.  move.l a0,-(a7)
  8063.  
  8064.  move.w (a0)+,d7    ; number of sides
  8065.  move.l #Rotated,a1
  8066.  move.l #OnScreen,a2
  8067. ; move.l #NewCornerBuff,a3
  8068.  moveq #0,d4
  8069.  moveq #0,d5
  8070.  moveq #0,d6
  8071.  clr.b anyclipping
  8072.  
  8073. cornerprocessloop:
  8074.  
  8075.  move.w (a0)+,d0
  8076.  and.w #$fff,d0
  8077.  move.w 6(a1,d0.w*8),d1
  8078.  ble  .canttell
  8079.  
  8080.  move.w (a2,d0.w*2),d3
  8081.  cmp.w leftclip,d3
  8082.  bgt.s .nol
  8083.  st d4
  8084.  st anyclipping
  8085.  bra.s .nos
  8086. .nol:
  8087.  cmp.w rightclip,d3
  8088.  blt.s .nor
  8089.  st d6
  8090.  st anyclipping
  8091.  bra.s .nos
  8092. .nor:
  8093.  st d5
  8094. .nos:
  8095.  bra .cantell
  8096.  
  8097. .canttell:
  8098.  st d5
  8099.  st anyclipping
  8100.  
  8101. .cantell:
  8102.  
  8103.  
  8104.  dbra d7,cornerprocessloop
  8105.  
  8106.  
  8107.  move.l (a7)+,a0
  8108.  tst.b d5
  8109.  bne.s somefloortodraw
  8110.  eor.b d4,d6
  8111.  bne dontdrawreturn
  8112.  
  8113. somefloortodraw:
  8114.  
  8115.  tst.b gourfloor
  8116.  bne goursides
  8117.  
  8118.  move.w #300,top
  8119.  move.w #-1,bottom
  8120.  move.w #0,drawit
  8121.  move.l #Rotated,a1
  8122.  move.l #OnScreen,a2
  8123.  move.w (a0)+,d7    ; no of sides
  8124. sideloop:
  8125.  move.w minz,d6
  8126.  move.w (a0)+,d1
  8127.  move.w (a0),d3
  8128.  and.w #$fff,d1
  8129.  and.w #$fff,d3
  8130.  
  8131.  move.w 6(a1,d1*8),d4    ;first z
  8132.  cmp.w d6,d4
  8133.  bgt firstinfront
  8134.  move.w 6(a1,d3*8),d5    ; sec z
  8135.  cmp.w d6,d5
  8136.  ble bothbehind
  8137. ** line must be on left and partially behind.
  8138.  sub.w d5,d4
  8139.  move.l (a1,d1*8),d0
  8140.  sub.l (a1,d3*8),d0
  8141.  asr.l #7,d0
  8142.  sub.w d5,d6
  8143.  muls d6,d0    ; new x coord
  8144.  divs d4,d0
  8145.  ext.l d0
  8146.  asl.l #7,d0
  8147.  
  8148.  add.l (a1,d3*8),d0
  8149.  move.w minz,d4
  8150.  move.w (a2,d3*2),d2
  8151.  divs d4,d0
  8152.  add.w MIDDLEX,d0
  8153.  move.l ypos,d3
  8154.  divs d5,d3
  8155.  move.w bottomline,d1 
  8156.  bra lineclipped
  8157.  
  8158. firstinfront:
  8159.  move.w 6(a1,d3*8),d5    ; sec z
  8160.  cmp.w d6,d5
  8161.  bgt bothinfront
  8162. ** line must be on right and partially behind.
  8163.  sub.w d4,d5    ; dz
  8164.  move.l (a1,d3*8),d2
  8165.  sub.l (a1,d1*8),d2    ; dx
  8166.  sub.w d4,d6
  8167.  asr.l #7,d2
  8168.  muls d6,d2    ; new x coord
  8169.  divs d5,d2
  8170.  ext.l d2
  8171.  asl.l #7,d2
  8172.  add.l (a1,d1*8),d2
  8173.  move.w minz,d5
  8174.  move.w (a2,d1*2),d0
  8175.  divs d5,d2
  8176.  add.w MIDDLEX,d2
  8177.  move.l ypos,d1
  8178.  divs d4,d1
  8179.  move.w bottomline,d3 
  8180.  bra lineclipped
  8181.  
  8182. bothinfront:
  8183.  
  8184. * Also, usefully enough, both are on-screen
  8185. * so no bottom clipping is needed.
  8186.  
  8187.  move.w (a2,d1*2),d0    ; first x
  8188.  move.w (a2,d3*2),d2    ; second x
  8189.  move.l ypos,d1
  8190.  move.l d1,d3
  8191.  divs d4,d1        ; first y
  8192.  divs d5,d3        ; second y
  8193. lineclipped:
  8194.  move.l #rightsidetab,a3
  8195.  cmp.w d1,d3
  8196.  beq lineflat
  8197.  st drawit
  8198.  bgt lineonright
  8199.  move.l #leftsidetab,a3
  8200.  exg d1,d3
  8201.  exg d0,d2
  8202.  
  8203.  lea (a3,d1*2),a3
  8204.  
  8205.  cmp.w top(pc),d1
  8206.  bge.s .nonewtop
  8207.  move.w d1,top
  8208. .nonewtop:
  8209.  cmp.w bottom(pc),d3
  8210.  ble.s .nonewbot
  8211.  move.w d3,bottom
  8212. .nonewbot:
  8213.  
  8214.  sub.w d1,d3    ; dy
  8215.  sub.w d0,d2    ; dx
  8216.  
  8217.  blt .linegoingleft
  8218.  
  8219.  ext.l d2
  8220.  divs d3,d2
  8221.  move.w d2,d6
  8222.  swap d2
  8223.  
  8224. ; moveq #0,d6
  8225. ; sub.w d3,d2
  8226. ; blt.s .noco
  8227. ;.makeco
  8228. ; addq #1,d6
  8229. ; sub.w d3,d2
  8230. ; bge.s .makeco
  8231. ;.noco
  8232. ; add.w d3,d2
  8233.  
  8234.  move.w d3,d4
  8235.  move.w d3,d5
  8236.  subq #1,d5
  8237.  move.w d6,d1
  8238.  addq #1,d1
  8239.  
  8240. .pixlopright:
  8241.  move.w d0,(a3)+
  8242.  sub.w d2,d4
  8243.  bge.s .nobigstep
  8244.  add.w d1,d0
  8245.  add.w d3,d4
  8246.  dbra d5,.pixlopright
  8247.  bra lineflat
  8248. .nobigstep
  8249.  add.w d6,d0
  8250.  dbra d5,.pixlopright
  8251.  bra lineflat
  8252.  
  8253. .linegoingleft:
  8254.  
  8255.  neg.w d2
  8256.  
  8257.  ext.l d2
  8258.  divs d3,d2
  8259.  move.w d2,d6
  8260.  swap d2
  8261.  
  8262.  
  8263. ; moveq #0,d6
  8264. ; sub.w d3,d2
  8265. ; blt.s .nocol
  8266. ;.makecol
  8267. ; addq #1,d6
  8268. ; sub.w d3,d2
  8269. ; bge.s .makecol
  8270. ;.nocol
  8271. ; add.w d3,d2
  8272.  
  8273.  
  8274.  
  8275.  move.w d3,d4
  8276.  move.w d3,d5
  8277.  subq #1,d5
  8278.  
  8279.  move.w d6,d1
  8280.  addq #1,d1
  8281.  
  8282. .pixlopleft:
  8283.  sub.w d2,d4
  8284.  bge.s .nobigstepl
  8285.  sub.w d1,d0
  8286.  add.w d3,d4
  8287.  move.w d0,(a3)+
  8288.  dbra d5,.pixlopleft
  8289.  bra lineflat
  8290.  
  8291. .nobigstepl
  8292.  sub.w d6,d0
  8293.  move.w d0,(a3)+
  8294.  dbra d5,.pixlopleft
  8295.  bra lineflat
  8296.  
  8297. lineonright:
  8298.  
  8299.  lea (a3,d1*2),a3
  8300.  
  8301.  cmp.w top(pc),d1
  8302.  bge.s .nonewtop
  8303.  move.w d1,top
  8304. .nonewtop:
  8305.  cmp.w bottom(pc),d3
  8306.  ble.s .nonewbot
  8307.  move.w d3,bottom
  8308. .nonewbot:
  8309.  
  8310.  sub.w d1,d3    ; dy
  8311.  sub.w d0,d2    ; dx
  8312.  blt .linegoingleft
  8313. ; addq #1,d0
  8314.  ext.l d2
  8315.  divs d3,d2
  8316.  move.w d2,d6
  8317.  swap d2
  8318.  
  8319. ; moveq #0,d6
  8320. ; sub.w d3,d2
  8321. ; blt.s .noco
  8322. ;.makeco
  8323. ; addq #1,d6
  8324. ; sub.w d3,d2
  8325. ; bge.s .makeco
  8326. ;.noco
  8327. ; add.w d3,d2
  8328.  
  8329.  move.w d3,d4
  8330.  move.w d3,d5
  8331.  subq #1,d5
  8332.  move.w d6,d1
  8333.  addq #1,d1
  8334.  
  8335. .pixlopright:
  8336.  sub.w d2,d4
  8337.  bge.s .nobigstep
  8338.  add.w d1,d0
  8339.  add.w d3,d4
  8340.  move.w d0,(a3)+
  8341.  dbra d5,.pixlopright
  8342.  bra lineflat
  8343.  
  8344. .nobigstep
  8345.  add.w d6,d0
  8346.  move.w d0,(a3)+
  8347.  dbra d5,.pixlopright
  8348.  bra lineflat
  8349.  
  8350. .linegoingleft:
  8351. ; addq #1,d0
  8352.  neg.w d2
  8353.  
  8354.  ext.l d2
  8355.  divs d3,d2
  8356.  move.w d2,d6
  8357.  swap d2
  8358.  
  8359.  
  8360. ; moveq #0,d6
  8361. ; sub.w d3,d2
  8362. ; blt.s .nocol
  8363. ;.makecol
  8364. ; addq #1,d6
  8365. ; sub.w d3,d2
  8366. ; bge.s .makecol
  8367. ;.nocol
  8368. ; add.w d3,d2
  8369.  
  8370.  move.w d3,d4
  8371.  move.w d3,d5
  8372.  subq #1,d5
  8373.  move.w d6,d1
  8374.  addq #1,d1
  8375.  
  8376. .pixlopleft:
  8377.  move.w d0,(a3)+
  8378.  sub.w d2,d4
  8379.  bge.s .nobigstepl
  8380.  sub.w d1,d0
  8381.  add.w d3,d4
  8382.  dbra d5,.pixlopleft
  8383.  bra lineflat
  8384.  
  8385. .nobigstepl
  8386.  sub.w d6,d0
  8387.  dbra d5,.pixlopleft
  8388.  
  8389. lineflat:
  8390.  
  8391. bothbehind:
  8392.  dbra d7,sideloop
  8393.  bra pastsides
  8394.  
  8395. fbr: dc.w 0
  8396. sbr: dc.w 0
  8397. FloorPtBrights: dc.l 0
  8398.  
  8399. goursides:
  8400.  
  8401.  move.w #300,top
  8402.  move.w #-1,bottom
  8403.  move.w #0,drawit
  8404.  move.l #Rotated,a1
  8405.  move.l #OnScreen,a2
  8406.  move.w (a0)+,d7    ; no of sides
  8407. sideloopGOUR:
  8408.  move.w minz,d6
  8409.  move.w (a0)+,d1
  8410.  move.w (a0),d3
  8411.  
  8412.  move.w d1,d4
  8413.  move.w d3,d5
  8414.  and.w #$0fff,d1
  8415.  and.w #$0fff,d3
  8416.  
  8417.  rol.w #4,d4
  8418.  rol.w #4,d5
  8419.  and.w #$f,d4
  8420.  and.w #$f,d5
  8421.  
  8422.  move.l FloorPtBrights,a4
  8423.  move.w (a4,d4.w*8),d4
  8424.  bge.s .okpos1
  8425.  neg.w d4
  8426. .okpos1:
  8427.  sub.w #300,d4
  8428.  move.w d4,fbr
  8429.  move.w (a4,d5.w*8),d4
  8430.  bge.s .okpos2
  8431.  neg.w d4
  8432. .okpos2:
  8433.  sub.w #300,d4
  8434.  move.w d4,sbr
  8435.  
  8436.  move.w 6(a1,d1*8),d4    ;first z
  8437.  cmp.w d6,d4
  8438.  bgt firstinfrontGOUR
  8439.  move.w 6(a1,d3*8),d5    ; sec z
  8440.  cmp.w d6,d5
  8441.  ble bothbehindGOUR
  8442. ** line must be on left and partially behind.
  8443.  sub.w d5,d4
  8444.  
  8445.  move.w fbr,d0
  8446.  sub.w sbr,d0
  8447.  sub.w d5,d6
  8448.  muls d6,d0
  8449.  divs d4,d0
  8450.  add.w sbr,d0
  8451.  move.w d0,fbr
  8452.  
  8453.  move.l (a1,d1*8),d0
  8454.  sub.l (a1,d3*8),d0
  8455.  asr.l #7,d0
  8456.  muls d6,d0    ; new x coord
  8457.  divs d4,d0
  8458.  ext.l d0
  8459.  asl.l #7,d0
  8460.  
  8461.  add.l (a1,d3*8),d0
  8462.  move.w minz,d4
  8463.  move.w (a2,d3*2),d2
  8464.  divs d4,d0
  8465.  add.w MIDDLEX,d0
  8466.  move.l ypos,d3
  8467.  divs d5,d3
  8468.  
  8469.  move.w bottomline,d1 
  8470.  bra lineclippedGOUR
  8471.  
  8472. firstinfrontGOUR:
  8473.  move.w 6(a1,d3*8),d5    ; sec z
  8474.  cmp.w d6,d5
  8475.  bgt bothinfrontGOUR
  8476. ** line must be on right and partially behind.
  8477.  sub.w d4,d5    ; dz
  8478.  
  8479.  move.w sbr,d2
  8480.  sub.w fbr,d2
  8481.  sub.w d4,d6
  8482.  muls d6,d2
  8483.  divs d5,d2
  8484.  add.w fbr,d2
  8485.  move.w d2,sbr
  8486.  
  8487.  move.l (a1,d3*8),d2
  8488.  sub.l (a1,d1*8),d2    ; dx
  8489.  asr.l #7,d2
  8490.  muls d6,d2    ; new x coord
  8491.  divs d5,d2
  8492.  ext.l d2
  8493.  asl.l #7,d2
  8494.  add.l (a1,d1*8),d2
  8495.  move.w minz,d5
  8496.  move.w (a2,d1*2),d0
  8497.  divs d5,d2
  8498.  add.w MIDDLEX,d2
  8499.  move.l ypos,d1
  8500.  divs d4,d1
  8501.  move.w bottomline,d3 
  8502.  bra lineclippedGOUR
  8503.  
  8504. bothinfrontGOUR:
  8505.  
  8506. * Also, usefully enough, both are on-screen
  8507. * so no bottom clipping is needed.
  8508.  
  8509.  move.w (a2,d1*2),d0    ; first x
  8510.  move.w (a2,d3*2),d2    ; second x
  8511.  move.l ypos,d1
  8512.  move.l d1,d3
  8513.  divs d4,d1        ; first y
  8514.  divs d5,d3        ; second y
  8515. lineclippedGOUR:
  8516.  move.l #rightsidetab,a3
  8517.  cmp.w d1,d3
  8518.  bne linenotflatGOUR
  8519.  
  8520. ; move.w fbr,d4
  8521. ; move.w sbr,d5
  8522. ; cmp.w d0,d2
  8523. ; bgt.s .nsw
  8524. ; exg d4,d5
  8525. ;.nsw:
  8526.  
  8527. ; move.l #leftbrighttab,a3
  8528. ; move.w d4,(a3,d3.w)
  8529. ; move.l #rightbrighttab,a3
  8530. ; move.w d5,(a3,d3.w) 
  8531.  bra lineflatGOUR
  8532.  
  8533. linenotflatGOUR
  8534.  st drawit
  8535.  bgt lineonrightGOUR
  8536.  move.l #leftsidetab,a3
  8537.  exg d1,d3
  8538.  exg d0,d2
  8539.  
  8540.  lea (a3,d1*2),a3
  8541.  lea leftbrighttab-leftsidetab(a3),a4
  8542.  
  8543.  cmp.w top(pc),d1
  8544.  bge.s .nonewtop
  8545.  move.w d1,top
  8546. .nonewtop:
  8547.  cmp.w bottom(pc),d3
  8548.  ble.s .nonewbot
  8549.  move.w d3,bottom
  8550. .nonewbot:
  8551.  
  8552.  sub.w d1,d3    ; dy
  8553.  sub.w d0,d2    ; dx
  8554.  
  8555.  blt .linegoingleft
  8556.  
  8557.  ext.l d2
  8558.  divs d3,d2
  8559.  move.w d2,d6
  8560.  swap d2
  8561.  move.w d2,a5
  8562.  
  8563. ; moveq #0,d6
  8564. ; sub.w d3,d2
  8565. ; blt.s .noco
  8566. ;.makeco
  8567. ; addq #1,d6
  8568. ; sub.w d3,d2
  8569. ; bge.s .makeco
  8570. ;.noco
  8571. ; add.w d3,d2
  8572.  
  8573.  move.w d3,d4
  8574.  move.w d3,d5
  8575.  subq #1,d5
  8576.  move.w d6,d1
  8577.  addq #1,d1
  8578.  move.w d1,a6
  8579.  
  8580.  moveq #0,d1
  8581.  move.w sbr,d1
  8582.  move.w fbr,d2
  8583.  sub.w d1,d2
  8584.  ext.l d2
  8585.  asl.w #8,d2
  8586.  asl.w #2,d2
  8587.  divs d3,d2 
  8588.  ext.l d2
  8589.  asl.l #6,d2
  8590.  swap d1
  8591.  
  8592. .pixlopright:
  8593.  move.w d0,(a3)+
  8594.  swap d1
  8595.  move.w d1,(a4)+
  8596.  swap d1
  8597.  add.l d2,d1
  8598.  
  8599.  sub.w a5,d4
  8600.  bge.s .nobigstep
  8601.  add.w a6,d0
  8602.  add.w d3,d4
  8603.  dbra d5,.pixlopright
  8604.  bra lineflatGOUR
  8605. .nobigstep
  8606.  
  8607.  add.w d6,d0
  8608.  dbra d5,.pixlopright
  8609.  bra lineflatGOUR
  8610.  
  8611. .linegoingleft:
  8612.  
  8613.  neg.w d2
  8614.  
  8615.  ext.l d2
  8616.  divs d3,d2
  8617.  move.w d2,d6
  8618.  swap d2
  8619.  
  8620.  
  8621. ; moveq #0,d6
  8622. ; sub.w d3,d2
  8623. ; blt.s .nocol
  8624. ;.makecol
  8625. ; addq #1,d6
  8626. ; sub.w d3,d2
  8627. ; bge.s .makecol
  8628. ;.nocol
  8629. ; add.w d3,d2
  8630.  
  8631.  move.w d3,d4
  8632.  move.w d3,d5
  8633.  subq #1,d5
  8634.  
  8635.  move.w d6,d1
  8636.  addq #1,d1
  8637.  move.w d1,a6
  8638.  move.w d2,a5
  8639.  
  8640.  moveq #0,d1
  8641.  move.w sbr,d1
  8642.  move.w fbr,d2
  8643.  sub.w d1,d2
  8644.  ext.l d2
  8645.  asl.w #8,d2
  8646.  asl.w #2,d2
  8647.  divs d3,d2 
  8648.  ext.l d2
  8649.  asl.l #6,d2
  8650.  swap d1
  8651.  
  8652. .pixlopleft:
  8653.  
  8654.  swap d1
  8655.  move.w d1,(a4)+
  8656.  swap d1
  8657.  add.l d2,d1
  8658.  
  8659.  sub.w a5,d4
  8660.  bge.s .nobigstepl
  8661.  sub.w a6,d0
  8662.  add.w d3,d4
  8663.  move.w d0,(a3)+
  8664.  dbra d5,.pixlopleft
  8665.  bra lineflatGOUR
  8666.  
  8667. .nobigstepl
  8668.  sub.w d6,d0
  8669.  move.w d0,(a3)+
  8670.  dbra d5,.pixlopleft
  8671.  bra lineflatGOUR
  8672.  
  8673. lineonrightGOUR:
  8674.  
  8675.  lea (a3,d1*2),a3
  8676.  
  8677.  lea rightbrighttab-rightsidetab(a3),a4
  8678.  
  8679.  cmp.w top(pc),d1
  8680.  bge.s .nonewtop
  8681.  move.w d1,top
  8682. .nonewtop:
  8683.  cmp.w bottom(pc),d3
  8684.  ble.s .nonewbot
  8685.  move.w d3,bottom
  8686. .nonewbot:
  8687.  
  8688.  sub.w d1,d3    ; dy
  8689.  sub.w d0,d2    ; dx
  8690.  blt .linegoingleft
  8691. ; addq #1,d0
  8692.  ext.l d2
  8693.  divs d3,d2
  8694.  move.w d2,d6
  8695.  swap d2
  8696.  
  8697. ; moveq #0,d6
  8698. ; sub.w d3,d2
  8699. ; blt.s .noco
  8700. ;.makeco
  8701. ; addq #1,d6
  8702. ; sub.w d3,d2
  8703. ; bge.s .makeco
  8704. ;.noco
  8705. ; add.w d3,d2
  8706.  
  8707.  move.w d3,d4
  8708.  move.w d3,d5
  8709.  subq #1,d5
  8710.  move.w d6,d1
  8711.  addq #1,d1
  8712.  
  8713.  move.w d1,a6
  8714.  move.w d2,a5
  8715.  
  8716.  moveq #0,d1
  8717.  move.w fbr,d1
  8718.  move.w sbr,d2
  8719.  sub.w d1,d2
  8720.  ext.l d2
  8721.  asl.w #8,d2
  8722.  asl.w #2,d2
  8723.  divs d3,d2 
  8724.  ext.l d2
  8725.  asl.l #6,d2
  8726.  swap d1
  8727.  
  8728. .pixlopright:
  8729.  
  8730.  swap d1
  8731.  move.w d1,(a4)+
  8732.  swap d1
  8733.  add.l d2,d1
  8734.  
  8735.  sub.w a5,d4
  8736.  bge.s .nobigstep
  8737.  add.w a6,d0
  8738.  add.w d3,d4
  8739.  move.w d0,(a3)+
  8740.  dbra d5,.pixlopright
  8741.  bra lineflatGOUR
  8742.  
  8743. .nobigstep
  8744.  add.w d6,d0
  8745.  move.w d0,(a3)+
  8746.  dbra d5,.pixlopright
  8747.  bra lineflatGOUR
  8748.  
  8749. .linegoingleft:
  8750. ; addq #1,d0
  8751.  neg.w d2
  8752.  
  8753.  ext.l d2
  8754.  divs d3,d2
  8755.  move.w d2,d6
  8756.  swap d2
  8757.  
  8758.  
  8759. ; moveq #0,d6
  8760. ; sub.w d3,d2
  8761. ; blt.s .nocol
  8762. ;.makecol
  8763. ; addq #1,d6
  8764. ; sub.w d3,d2
  8765. ; bge.s .makecol
  8766. ;.nocol
  8767. ; add.w d3,d2
  8768.  
  8769.  move.w d3,d4
  8770.  move.w d3,d5
  8771.  subq #1,d5
  8772.  move.w d6,d1
  8773.  addq #1,d1
  8774.  move.w d1,a6
  8775.  move.w d2,a5
  8776.  
  8777.  moveq #0,d1
  8778.  move.w fbr,d1
  8779.  move.w sbr,d2
  8780.  sub.w d1,d2
  8781.  ext.l d2
  8782.  asl.w #8,d2
  8783.  asl.w #2,d2
  8784.  divs d3,d2 
  8785.  ext.l d2
  8786.  asl.l #6,d2
  8787.  swap d1
  8788.  
  8789. .pixlopleft:
  8790.  
  8791.  swap d1
  8792.  move.w d1,(a4)+
  8793.  swap d1
  8794.  add.l d2,d1
  8795.  
  8796.  move.w d0,(a3)+
  8797.  sub.w a5,d4
  8798.  bge.s .nobigstepl
  8799.  sub.w a6,d0
  8800.  add.w d3,d4
  8801.  dbra d5,.pixlopleft
  8802.  bra lineflatGOUR
  8803.  
  8804. .nobigstepl
  8805.  sub.w d6,d0
  8806.  dbra d5,.pixlopleft
  8807.  
  8808. lineflatGOUR:
  8809.  
  8810. bothbehindGOUR:
  8811.  dbra d7,sideloopGOUR
  8812.  
  8813. pastsides:
  8814.  
  8815.  addq #2,a0
  8816.  
  8817.  move.w #320,linedir
  8818.  
  8819. ; move.l FASTBUFFER2,a6
  8820. ; add.l BIGMIDDLEY,a6
  8821. ; move.l a6,REFPTR
  8822.  
  8823.  move.l FASTBUFFER,a6
  8824.  add.l BIGMIDDLEY,a6
  8825.  move.w (a0)+,d6
  8826.  add.w SMALLIT,d6
  8827.  move.w d6,scaleval
  8828.  move.w (a0)+,d6
  8829.  
  8830.  ifne CHEESEY
  8831.  move.w d6,d7    ; 000000XX000000YY
  8832.  lsr.w #6,d6
  8833.  add.w d6,d7    ; 000000XX0000XXYY
  8834.  
  8835.  and.b #%111,d6    ; 000000XX00000XYY
  8836.  add.b d7,d7    ; 000000XX0000XYY0
  8837.  asl.w #4,d7    ; 00XX0000 XYY00000
  8838.  and.w #%0010000011100000,d7
  8839.  move.w d7,d6
  8840.  endc
  8841.  
  8842.  move.w d6,whichtile
  8843.  move.w (a0)+,d6
  8844.  add.w ZoneBright,d6
  8845.  move.w d6,lighttype
  8846.  move.w above(pc),d6
  8847.  beq groundfloor
  8848. * on ceiling:
  8849.  move.w #-320,linedir
  8850.  suba.w #320,a6
  8851. groundfloor:
  8852.  
  8853.  move.w xoff,d6
  8854.  move.w zoff,d7
  8855.  add.w xwobxoff,d7
  8856.  add.w xwobzoff,d6
  8857.  ext.l d6
  8858.  ext.l d7
  8859.  
  8860.  tst.b FULLSCR
  8861.  beq.s .shiftit
  8862.  
  8863.  asl.l #2,d6
  8864.  asl.l #2,d7
  8865.  divs #3,d6
  8866.  divs #3,d7
  8867.  swap d6
  8868.  swap d7
  8869.  clr.w d6
  8870.  clr.w d7
  8871.  asr.l #2,d6
  8872.  asr.l #2,d7
  8873.  bra.s .donsht
  8874.  
  8875. .shiftit
  8876.  
  8877. ; divs #3,d6
  8878. ; divs #3,d7
  8879.  swap d6
  8880.  swap d7
  8881.  clr.w d6
  8882.  clr.w d7
  8883.  asr.l #1,d6
  8884.  asr.l #1,d7
  8885. .donsht:
  8886.  move.w scaleval(pc),d3
  8887.  beq.s .samescale
  8888.  bgt.s .scaledown
  8889.  neg.w d3
  8890.  asr.l d3,d7
  8891.  asr.l d3,d6
  8892.  bra.s .samescale
  8893. .scaledown:
  8894.  asl.l d3,d6
  8895.  asl.l d3,d7
  8896. .samescale
  8897.  
  8898.  ifne CHEESEY
  8899.  asr.l #1,d6
  8900.  asr.l #1,d7
  8901.  endc
  8902.  
  8903.  move.l d6,sxoff
  8904.  move.l d7,szoff
  8905.  bra pastscale 
  8906.  
  8907.  asr.l #3,d1
  8908.  asr.l #3,d2
  8909.  asr.l #2,d1
  8910.  asr.l #2,d2
  8911.  asr.l #1,d1
  8912.  asr.l #1,d2
  8913. scaleprogfrom
  8914.  nop
  8915.  nop
  8916.  asl.l #1,d1
  8917.  asl.l #1,d2
  8918.  asl.l #2,d1
  8919.  asl.l #2,d2
  8920.  asl.l #3,d1
  8921.  asl.l #3,d2
  8922.  
  8923. top: dc.w 0
  8924. bottom: dc.w 0
  8925. ypos: dc.l 0
  8926. nfloors: dc.w 0
  8927. lighttype: dc.w 0
  8928. above: dc.w 0 
  8929. linedir: dc.w 0
  8930. distaddr: dc.w 0
  8931.  
  8932. minz: dc.l 0
  8933.  
  8934. leftsidetab:
  8935.  ds.w 512*2
  8936. rightsidetab:
  8937.  ds.w 512*2
  8938. leftbrighttab:
  8939.  ds.w 512*2
  8940. rightbrighttab:
  8941.  ds.w 512*2
  8942.  
  8943. PointBrights:
  8944.  dc.l 0
  8945. CurrentPointBrights:
  8946.  ds.l 2*256*10
  8947.  
  8948. movespd: dc.w 0
  8949. largespd: dc.l 0
  8950. disttobot: dc.w 0
  8951.  
  8952. pastscale:
  8953.  
  8954.  
  8955.  tst.b drawit(pc)
  8956.  beq dontdrawfloor
  8957.  
  8958.  tst.b DOUBLEHEIGHT
  8959.  beq pix1h
  8960.  
  8961.  move.l a0,-(a7)
  8962.  move.w linedir,d1
  8963.  add.w d1,linedir
  8964.  
  8965.  move.l #leftsidetab,a4
  8966.  move.w top(pc),d1
  8967.  tst.w above
  8968.  beq.s .clipfloor
  8969.  
  8970.  sub.w #320,a6
  8971.  
  8972.  move.w MIDDLEY,d7
  8973.  subq #1,d7
  8974.  sub.w d1,d7
  8975.  move.w d7,disttobot
  8976.  
  8977.  move.w bottom(pc),d7
  8978.  move.w MIDDLEY,d3
  8979.  move.w d3,d4
  8980.  sub.w topclip,d3
  8981.  sub.w botclip,d4
  8982.  cmp.w d3,d1
  8983.  bge predontdrawfloor
  8984.  cmp.w d4,d7
  8985.  blt predontdrawfloor
  8986.  cmp.w d4,d1
  8987.  bge.s .nocliptoproof
  8988.  move.w d4,d1
  8989. .nocliptoproof
  8990.  cmp.w d3,d7
  8991.  blt .doneclip
  8992.  move.w d3,d7
  8993.  bra .doneclip
  8994.  
  8995. .clipfloor:
  8996.  move.w BOTTOMY,d7
  8997.  sub.w MIDDLEY,d7
  8998.  subq #1,d7
  8999.  sub.w d1,d7
  9000.  move.w d7,disttobot
  9001.  
  9002.  move.w bottom(pc),d7
  9003.  move.w botclip,d4
  9004.  sub.w MIDDLEY,d4
  9005.  cmp.w d4,d1
  9006.  bge predontdrawfloor
  9007.  move.w topclip,d3
  9008.  sub.w MIDDLEY,d3
  9009.  cmp.w d3,d1
  9010.  bge.s .nocliptopfloor
  9011.  move.w d3,d1
  9012. .nocliptopfloor 
  9013.  cmp.w d3,d7
  9014.  ble predontdrawfloor
  9015.  cmp.w d4,d7
  9016.  blt.s .noclipbotfloor
  9017.  move.w d4,d7
  9018. .noclipbotfloor:
  9019.  
  9020. .doneclip:
  9021.  
  9022.  lea (a4,d1*2),a4
  9023.  addq #1,d7
  9024.  sub.w d1,d7
  9025.  
  9026. ;moveq #0,d0
  9027.  asr.w #1,d1
  9028. ; addx d0,d1
  9029.  
  9030. ; move.l #dists,a2
  9031.  move.w distaddr,d0
  9032.  muls #64,d0
  9033.  move.l d0,a2
  9034. ; muls #25,d0
  9035. ; adda.w d0,a2
  9036. ; lea (a2,d1*2),a2
  9037.  asr.w #1,d7
  9038.  ble predontdrawfloor 
  9039.  move.w d1,d0
  9040.  bne.s .notzero
  9041.  moveq #1,d0
  9042. .notzero
  9043.  add.w d0,d0
  9044.  muls linedir,d1
  9045.  add.l d1,a6
  9046. ; sub.l d1,REFPTR
  9047.  move.l TexturePal,a1
  9048.  add.l #256*32,a1
  9049.  move.l LineToUse,a5
  9050.  
  9051.  move.w #4,tonextline
  9052.  
  9053.  bra pix2h
  9054.  
  9055. pix1h:
  9056.  
  9057.  move.l a0,-(a7)
  9058.  
  9059.  move.l #leftsidetab,a4
  9060.  move.w top(pc),d1
  9061.   
  9062.  tst.w above
  9063.  beq.s clipfloor
  9064.  
  9065.  move.w MIDDLEY,d7
  9066.  subq #1,d7
  9067.  sub.w d1,d7
  9068.  move.w d7,disttobot
  9069.  
  9070.  move.w bottom(pc),d7
  9071.  move.w MIDDLEY,d3
  9072.  move.w d3,d4
  9073.  sub.w topclip,d3
  9074.  sub.w botclip,d4
  9075.  cmp.w d3,d1
  9076.  bge predontdrawfloor
  9077.  cmp.w d4,d7
  9078.  blt predontdrawfloor
  9079.  cmp.w d4,d1
  9080.  bge.s .nocliptoproof
  9081.  move.w d4,d1
  9082. .nocliptoproof
  9083.  cmp.w d3,d7
  9084.  blt doneclip
  9085.  move.w d3,d7
  9086.  bra doneclip
  9087.  
  9088. clipfloor:
  9089.  move.w BOTTOMY,d7
  9090.  sub.w MIDDLEY,d7
  9091.  subq #1,d7
  9092.  sub.w d1,d7
  9093.  move.w d7,disttobot
  9094.  
  9095.  move.w bottom(pc),d7
  9096.  move.w botclip,d4
  9097.  sub.w MIDDLEY,d4
  9098.  cmp.w d4,d1
  9099.  bge predontdrawfloor
  9100.  move.w topclip,d3
  9101.  sub.w MIDDLEY,d3
  9102.  cmp.w d3,d1
  9103.  bge.s .nocliptopfloor
  9104.  move.w d3,d1
  9105. .nocliptopfloor 
  9106.  cmp.w d3,d7
  9107.  ble predontdrawfloor
  9108.  cmp.w d4,d7
  9109.  blt.s .noclipbotfloor
  9110.  move.w d4,d7
  9111. .noclipbotfloor:
  9112.  
  9113. doneclip:
  9114.  
  9115.  lea (a4,d1*2),a4
  9116. ; move.l #dists,a2
  9117.  move.w distaddr,d0
  9118.  muls #64,d0
  9119.  move.l d0,a2
  9120. ; muls #25,d0
  9121. ; adda.w d0,a2
  9122. ; lea (a2,d1*2),a2
  9123.  sub.w d1,d7
  9124.  ble predontdrawfloor 
  9125.  move.w d1,d0
  9126.  bne.s .notzero
  9127.  moveq #1,d0
  9128. .notzero
  9129.  muls linedir,d1
  9130.  add.l d1,a6
  9131. ; sub.l d1,REFPTR
  9132.  move.l TexturePal,a1
  9133.  add.l #256*32,a1
  9134.  move.l LineToUse,a5
  9135.  
  9136.  move.w #2,tonextline
  9137.  
  9138. pix2h:
  9139.  
  9140.  tst.b gourfloor
  9141.  bne dogourfloor
  9142.  
  9143.  tst.b anyclipping
  9144.  beq dofloornoclip
  9145.  
  9146. dofloor:
  9147. ; move.w (a2)+,d0
  9148.  move.w leftclip,d3
  9149.  move.w rightclip,d4
  9150.  move.w rightsidetab-leftsidetab(a4),d2
  9151.  
  9152.  addq #1,d2
  9153.  cmp.w d3,d2
  9154.  ble.s nodrawline
  9155.  cmp.w d4,d2
  9156.  ble.s noclipright
  9157.  move.w d4,d2
  9158. noclipright:
  9159.  move.w (a4),d1
  9160.  cmp.w d4,d1
  9161.  bge.s nodrawline
  9162.  cmp.w d3,d1
  9163.  bge.s noclipleft
  9164.  move.w d3,d1
  9165. noclipleft:
  9166.  cmp.w d1,d2
  9167.  ble.s nodrawline
  9168.  
  9169.  move.w d1,leftedge
  9170.  move.w d2,rightedge
  9171.  
  9172. ; moveq #0,d1
  9173. ; moveq #0,d3
  9174. ; move.w leftbrighttab-leftsidetab(a4),d1
  9175. ; bge.s .okbl
  9176. ; moveq #0,d1
  9177. ;.okbl:
  9178.  
  9179. ; move.w rightbrighttab-leftsidetab(a4),d3
  9180. ; bge.s .okbr
  9181. ; moveq #0,d3
  9182. ;.okbr:
  9183.  
  9184. ; sub.w d1,d3
  9185. ; asl.w #8,d1
  9186. ; move.l d1,leftbright
  9187. ; swap d3
  9188. ; asr.l #5,d3
  9189. ; divs d5,d3
  9190. ; move.w d3,d5
  9191. ; muls.w d6,d5
  9192. ; asr.l #3,d5
  9193. ; clr.b d5
  9194. ; add.w d5,leftbright+2
  9195.  
  9196. ; ext.l d3
  9197. ; asl.l #5,d3
  9198. ; swap d3
  9199. ; asl.w #8,d3
  9200. ; move.l d3,brightspd
  9201.  
  9202.  move.l a6,a3
  9203.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  9204.  move.l a2,d7
  9205.  asl.l #2,d7
  9206.  ext.l d0
  9207.  divs.l d0,d7
  9208.  move.l d7,d0
  9209.  jsr (a5)
  9210.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  9211. nodrawline
  9212.  sub.w #1,disttobot
  9213.  move.w linedir(pc),d3
  9214.  adda.w d3,a6
  9215. ; ext.l d3
  9216. ; sub.l d3,REFPTR
  9217.  move.w tonextline,d3
  9218.  add.w d3,a4
  9219.  asr.w #1,d3
  9220.  add.w d3,d0
  9221.  subq #1,d7
  9222.  bgt dofloor
  9223.  
  9224. predontdrawfloor
  9225.  move.l (a7)+,a0
  9226.  
  9227. dontdrawfloor:
  9228.  
  9229.  rts
  9230.  
  9231. tonextline: dc.w 0
  9232. anyclipping: dc.w 0
  9233.  
  9234. dofloornoclip:
  9235. ; move.w (a2)+,d0
  9236.  move.w rightsidetab-leftsidetab(a4),d2
  9237.  addq #1,d2
  9238.  move.w (a4),d1
  9239.  move.w d1,leftedge
  9240.  move.w d2,rightedge
  9241.  
  9242. ; sub.w d1,d2
  9243.  
  9244. ; moveq #0,d1
  9245. ; moveq #0,d3
  9246. ; move.w leftbrighttab-leftsidetab(a4),d1
  9247. ; bge.s .okbl
  9248. ; moveq #0,d1
  9249. ;.okbl:
  9250.  
  9251. ; move.w rightbrighttab-leftsidetab(a4),d3
  9252. ; bge.s .okbr
  9253. ; moveq #0,d3
  9254. ;.okbr:
  9255.  
  9256. ; sub.w d1,d3
  9257. ; asl.w #8,d1
  9258. ; move.l d1,leftbright
  9259. ; swap d3
  9260. ; asr.l #5,d3
  9261. ; divs d2,d3
  9262. ; ext.l d3
  9263. ; asl.l #5,d3
  9264. ; swap d3
  9265. ; asl.w #8,d3
  9266. ; move.l d3,brightspd
  9267.  
  9268.  move.l a6,a3
  9269.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  9270.  move.l a2,d7
  9271.  asl.l #2,d7
  9272.  ext.l d0
  9273.  divs.l d0,d7
  9274.  move.l d7,d0
  9275.  jsr (a5)
  9276.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  9277.  sub.w #1,disttobot
  9278.  move.w linedir(pc),d3
  9279.  adda.w d3,a6
  9280. ; ext.l d3
  9281. ; sub.l d3,REFPTR
  9282.  move.w tonextline,d3
  9283.  add.w d3,a4
  9284.  asr.w #1,d3
  9285.  add.w d3,d0
  9286.  subq #1,d7
  9287.  bgt dofloornoclip
  9288.  
  9289.  bra predontdrawfloor
  9290.  
  9291. dogourfloor:
  9292.  tst.b anyclipping
  9293.  beq dofloornoclipGOUR
  9294.  
  9295. dofloorGOUR:
  9296. ; move.w (a2)+,d0
  9297.  move.w leftclip,d3
  9298.  move.w rightclip,d4
  9299.  move.w rightsidetab-leftsidetab(a4),d2
  9300.  
  9301.  move.w d2,d5
  9302.  sub.w (a4),d5
  9303.  addq #1,d5
  9304.  moveq #0,d6
  9305.  
  9306.  addq #1,d2
  9307.  cmp.w d3,d2
  9308.  ble nodrawlineGOUR
  9309.  cmp.w d4,d2
  9310.  ble.s nocliprightGOUR
  9311.  move.w d4,d2
  9312. nocliprightGOUR:
  9313.  move.w (a4),d1
  9314.  cmp.w d4,d1
  9315.  bge nodrawlineGOUR
  9316.  cmp.w d3,d1
  9317.  bge.s noclipleftGOUR
  9318.  move.w d3,d6
  9319.  subq #1,d6
  9320.  sub.w d1,d6
  9321.  move.w d3,d1
  9322. noclipleftGOUR:
  9323.  cmp.w d1,d2
  9324.  ble nodrawlineGOUR
  9325.  
  9326.  move.w d1,leftedge
  9327.  move.w d2,rightedge
  9328.  
  9329.  move.l a2,d2
  9330.  asl.l #2,d2
  9331.  ext.l d0
  9332.  divs.l d0,d2
  9333.  move.l d2,dst
  9334.  asr.l #7,d2
  9335.  asr.l #2,d2
  9336. ; addq #5,d2
  9337. ; add.w lighttype,d2
  9338.  
  9339.  moveq #0,d1
  9340.  moveq #0,d3
  9341.  move.w leftbrighttab-leftsidetab(a4),d1
  9342.  add.w d2,d1
  9343.  bge.s .okbl
  9344.  moveq #0,d1
  9345. .okbl:
  9346. ; asr.w #1,d1
  9347.  cmp.w #30,d1
  9348.  ble.s .okdl
  9349.  move.w #30,d1
  9350. .okdl:
  9351.  
  9352.  move.w rightbrighttab-leftsidetab(a4),d3
  9353.  add.w d2,d3
  9354.  bge.s .okbr
  9355.  moveq #0,d3
  9356. .okbr:
  9357. ; asr.w #1,d3
  9358.  cmp.w #30,d3
  9359.  ble.s .okdr
  9360.  move.w #30,d3
  9361. .okdr:
  9362.  
  9363.  sub.w d1,d3
  9364.  asl.w #8,d1
  9365.  move.w d1,leftbright
  9366.  swap d3
  9367.  tst.l d3
  9368.  bgt.s .OKITSPOSALREADY 
  9369.  neg.l d3
  9370.  asr.l #6,d3
  9371.  divs d5,d3
  9372.  neg.w d3
  9373.  bra.s .OKNOWITSNEG
  9374.  
  9375. .OKITSPOSALREADY
  9376.  asr.l #6,d3
  9377.  divs d5,d3
  9378. .OKNOWITSNEG
  9379.  muls d3,d6
  9380.  add.w #256*4,d6
  9381.  asr.w #2,d6
  9382.  clr.b d6
  9383.  add.w leftbright,d6
  9384.  bge.s .oklbnn
  9385.  moveq #0,d6
  9386. .oklbnn:
  9387.  move.w d6,leftbright
  9388.  
  9389.  ext.l d3
  9390.  asr.l #2,d3
  9391. ; swap d3
  9392. ; asl.w #8,d3
  9393.  move.w d3,brightspd
  9394.  
  9395.  move.l a6,a3
  9396.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  9397.  move.l dst,d0
  9398.  move.l TexturePal,a1
  9399.  add.l #256*32,a1
  9400.  move.l floortile,a0
  9401.  adda.w whichtile,a0
  9402.  jsr pastfloorbright
  9403.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  9404. nodrawlineGOUR
  9405.  
  9406.  sub.w #1,disttobot
  9407.  
  9408.  move.w linedir(pc),d3
  9409.  adda.w d3,a6
  9410. ; ext.l d3
  9411. ; sub.l d3,REFPTR
  9412.  move.w tonextline,d3
  9413.  add.w d3,a4
  9414.  asr.w #1,d3
  9415.  add.w d3,d0
  9416.  subq #1,d7
  9417.  bgt dofloorGOUR
  9418.  
  9419. predontdrawfloorGOUR
  9420.  move.l (a7)+,a0
  9421.  
  9422. dontdrawfloorGOUR:
  9423.  
  9424.  rts
  9425.  
  9426. REFPTR: dc.l 0
  9427.  
  9428. dofloornoclipGOUR:
  9429. ; move.w (a2)+,d0
  9430.  move.w rightsidetab-leftsidetab(a4),d2
  9431.  addq #1,d2
  9432.  move.w (a4),d1
  9433.  move.w d1,leftedge
  9434.  move.w d2,rightedge
  9435.  
  9436.  sub.w d1,d2
  9437.  
  9438.  move.l a2,d6
  9439.  asl.l #2,d6
  9440.  ext.l d0
  9441.  divs.l d0,d6
  9442.  move.l d6,d5
  9443.  asr.l #7,d5
  9444.  asr.l #2,d5
  9445. ; addq #5,d5
  9446. ; add.w lighttype,d5
  9447.  
  9448.  moveq #0,d1
  9449.  moveq #0,d3
  9450.  move.w leftbrighttab-leftsidetab(a4),d1
  9451.  add.w d5,d1
  9452.  bge.s .okbl
  9453.  moveq #0,d1
  9454. .okbl:
  9455. ; asr.w #1,d1
  9456.  cmp.w #30,d1
  9457.  ble.s .okdl
  9458.  move.w #30,d1
  9459. .okdl:
  9460.  
  9461.  move.w rightbrighttab-leftsidetab(a4),d3
  9462.  add.w d5,d3
  9463.  bge.s .okbr
  9464.  moveq #0,d3
  9465. .okbr:
  9466. ; asr.w #1,d3
  9467.  cmp.w #30,d3
  9468.  ble.s .okdr
  9469.  move.w #30,d3
  9470. .okdr:
  9471.  
  9472. ; sub.w d1,d3
  9473. ; asl.w #8,d1
  9474. ; move.l d1,leftbright
  9475. ; swap d3
  9476. ; asr.l #5,d3
  9477. ; divs d2,d3
  9478. ; ext.l d3
  9479. ; asl.l #5,d3
  9480. ; swap d3
  9481. ; asl.w #8,d3
  9482. ; move.l d3,brightspd
  9483.  
  9484.  sub.w d1,d3
  9485.  asl.w #8,d1
  9486.  move.w d1,leftbright
  9487.  swap d3
  9488.  ext.l d2
  9489.  divs.l d2,d3
  9490.  asr.l #8,d3
  9491.  move.w d3,brightspd
  9492.  
  9493.  move.l a6,a3
  9494.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  9495.  move.l d6,d0
  9496.  move.l d0,dst
  9497.  move.l TexturePal,a1
  9498.  add.l #256*32,a1
  9499.  move.l floortile,a0
  9500.  adda.w whichtile,a0
  9501.  jsr pastfloorbright
  9502.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  9503.  sub.w #1,disttobot
  9504.  
  9505.  move.w linedir(pc),d3
  9506.  adda.w d3,a6
  9507. ; ext.l d3
  9508. ; sub.l d3,REFPTR
  9509.  
  9510.  move.w tonextline,d3
  9511.  add.w d3,a4
  9512.  asr.w #1,d3
  9513.  add.w d3,d0
  9514.  subq #1,d7
  9515.  bgt dofloornoclipGOUR
  9516.  
  9517.  bra predontdrawfloorGOUR
  9518.  
  9519.  
  9520.  
  9521. dists:
  9522. ; incbin "floordists"
  9523. drawit: dc.w 0
  9524.  
  9525. LineToUse: dc.l 0
  9526.  
  9527. ***************************
  9528. * Right then, time for the floor
  9529. * routine...
  9530. * For test purposes, give it
  9531. * a3 = point to screen
  9532. * d0= z distance away
  9533. * and sinval+cosval must be set up.
  9534. ***************************
  9535.  
  9536. BLACKFLOOR:
  9537.  moveq #0,d0
  9538.  bra.s DOBLACK
  9539.  
  9540. SimpleFloorLine:
  9541.  
  9542.  CACHE_OFF d2
  9543.  
  9544.  move.l #doacrossline,a1
  9545.  move.w leftedge(pc),d1
  9546.  move.w rightedge(pc),d3
  9547.  sub.w d1,d3
  9548.  lea (a1,d1.w*4),a1
  9549.  move.w (a1,d3.w*4),d4
  9550.  move.w #$4e75,(a1,d3.w*4)
  9551.  
  9552.  tst.b CLRNOFLOOR
  9553.  bne.s BLACKFLOOR
  9554.  
  9555.  move.l #PLAINSCALE,a2
  9556.  
  9557.  move.w d0,d2
  9558.  move.w lighttype,d1
  9559.  asr.w #8,d2
  9560.  add.w #5,d1
  9561.  add.w d2,d1
  9562.  bge.s .fixedbright
  9563.  moveq #0,d1
  9564. .fixedbright:
  9565.  cmp.w #28,d1
  9566.  ble.s .smallbright
  9567.  move.w #28,d1
  9568. .smallbright:
  9569.  lea (a2,d1.w*2),a2
  9570.  
  9571.  move.w whichtile,d0
  9572.  move.w d0,d1
  9573.  and.w #$3,d1
  9574.  and.w #$300,d0
  9575.  lsl.b #6,d1
  9576.  move.b d1,d0
  9577.  move.w d0,tstwhich
  9578.  move.w (a2,d0.w),d0
  9579.  
  9580. DOBLACK:
  9581.  jsr (a1)
  9582.  move.w d4,(a1,d3.w*4)
  9583.  
  9584.  CACHE_ON d2
  9585.  
  9586.  rts
  9587.  
  9588. tstwhich: dc.w 0
  9589. whichtile: dc.w 0
  9590.   
  9591. PLAINSCALE: 
  9592. ;incbin "ab3:includes/plainscale"
  9593.   
  9594. storeit: dc.l 0
  9595.  
  9596. doacrossline:
  9597. val SET 0
  9598.  REPT 32
  9599.  move.w d0,val(a3)
  9600. val SET val+4
  9601.  ENDR
  9602. val SET val+4
  9603.  REPT 32
  9604.  move.w d0,val(a3)
  9605. val SET val+4
  9606.  ENDR
  9607. val SET val+4
  9608.  REPT 32
  9609.  move.w d0,val(a3)
  9610. val SET val+4
  9611.  ENDR
  9612.  rts
  9613.  
  9614.  
  9615. leftedge: dc.w 0
  9616. rightedge: dc.w 0
  9617.  
  9618. rndpt: dc.l rndtab
  9619.  
  9620.  
  9621. dst: dc.l 0
  9622.  
  9623. FloorLine:
  9624.  
  9625.  move.l floortile,a0
  9626.  adda.w whichtile,a0
  9627.  move.w lighttype,d1
  9628.  move.l d0,dst    ; *4
  9629.  move.l d0,d2    ; *4
  9630. *********************
  9631. * Old version
  9632.  asr.l #2,d2
  9633.  asr.l #8,d2
  9634.  add.w #5,d1
  9635. *********************
  9636. ; asr.w #3,d2
  9637. ; sub.w #4,d2
  9638. ; cmp.w #6,d2
  9639. ; blt.s flbrbr
  9640. ; move.w #6,d2
  9641. ;flbrbr:
  9642. *********************
  9643.  add.w d2,d1
  9644.  bge.s .fixedbright
  9645.  moveq #0,d1
  9646. .fixedbright:
  9647.  cmp.w #28,d1
  9648.  ble.s .smallbright
  9649.  move.w #28,d1
  9650. .smallbright:
  9651.  move.l TexturePal,a1
  9652.  add.l #256*32,a1
  9653.  add.l floorbright(pc,d1.w*4),a1
  9654.  bra pastfloorbright
  9655.  
  9656. ConstCol: dc.w 0
  9657.  
  9658. BumpLine:
  9659.  
  9660.  tst.b smoothbumps
  9661.  beq.s Chunky
  9662.  
  9663.  move.l #SmoothTile,a0
  9664.  lea Smoothscalecols,a1
  9665.  bra pastast
  9666.  
  9667. Chunky:
  9668.  
  9669.  moveq #0,d2
  9670.  move.l #Bumptile,a0
  9671.  move.w whichtile,d2
  9672.  adda.w d2,a0
  9673.  ror.l #2,d2
  9674.  lsr.w #6,d2
  9675.  rol.l #2,d2
  9676.  and.w #15,d2
  9677.  move.l #ConstCols,a1
  9678.  move.w (a1,d2.w*2),ConstCol
  9679.  lea Bumpscalecols,a1
  9680.  
  9681. pastast:
  9682.  move.w lighttype,d1
  9683.  
  9684.  move.l d0,dst
  9685.  
  9686.  move.l d0,d2
  9687. *********************
  9688. * Old version
  9689.  asr.l #2,d2
  9690.  asr.l #8,d2
  9691.  add.w #5,d1
  9692. *********************
  9693. ; asr.w #3,d2
  9694. ; sub.w #4,d2
  9695. ; cmp.w #6,d2
  9696. ; blt.s flbrbr
  9697. ; move.w #6,d2
  9698. ;flbrbr:
  9699. *********************
  9700.  add.w d2,d1
  9701.  bge.s .fixedbright
  9702.  moveq #0,d1
  9703. .fixedbright:
  9704.  cmp.w #31,d1
  9705.  ble.s .smallbright
  9706.  move.w #31,d1
  9707. .smallbright:
  9708.  add.l floorbright(pc,d1.w*4),a1
  9709.  bra pastfloorbright
  9710.  
  9711.  
  9712. floorbright:
  9713.  dc.l 512*0
  9714.  dc.l 512*1
  9715.  dc.l 512*2
  9716.  dc.l 512*3
  9717.  dc.l 512*4
  9718.  
  9719.  dc.l 512*5
  9720.  dc.l 512*6
  9721.  dc.l 512*7
  9722.  dc.l 512*8
  9723.  dc.l 512*9
  9724.  
  9725.  dc.l 512*10
  9726.  dc.l 512*11
  9727.  dc.l 512*12
  9728.  dc.l 512*13
  9729.  dc.l 512*14
  9730.  
  9731.  dc.l 512*15
  9732.  dc.l 512*16
  9733.  dc.l 512*17
  9734.  dc.l 512*18
  9735.  dc.l 512*19
  9736.  
  9737.  dc.l 512*20
  9738.  dc.l 512*21
  9739.  dc.l 512*22
  9740.  dc.l 512*23
  9741.  dc.l 512*24
  9742.  
  9743.  dc.l 512*25
  9744.  dc.l 512*26
  9745.  dc.l 512*27
  9746.  dc.l 512*28
  9747.  dc.l 512*29
  9748.  
  9749.  dc.l 512*30
  9750.  dc.l 512*31
  9751.  
  9752. widthleft: dc.w 0
  9753. scaleval: dc.w 0
  9754. sxoff: dc.l 0
  9755. szoff: dc.l 0
  9756. xoff34: dc.w 0
  9757. zoff34: dc.w 0
  9758. scosval: dc.w 0
  9759. ssinval: dc.w 0
  9760.  
  9761.  
  9762. floorsetbright:
  9763.  move.l #walltiles,a0
  9764.  
  9765. pastfloorbright:
  9766.  
  9767.  move.l d0,d1
  9768.  muls cosval,d1    ; change in x across whole width
  9769.  move.l d0,d2
  9770.  muls sinval,d2    ; change in z across whole width
  9771.  neg.l d2
  9772.  ifne CHEESEY
  9773.  asr.l #3,d2
  9774.  asr.l #3,d1
  9775.  endc
  9776.  ifeq CHEESEY
  9777.  asr.l #2,d2
  9778.  asr.l #2,d1
  9779.  endc
  9780. scaleprog:
  9781.  move.w scaleval(pc),d3
  9782.  beq.s .samescale
  9783.  bgt.s .scaledown
  9784.  neg.w d3
  9785.  asr.l d3,d1
  9786.  asr.l d3,d2
  9787.  bra.s .samescale
  9788. .scaledown:
  9789.  asl.l d3,d1
  9790.  asl.l d3,d2
  9791. .samescale
  9792.  
  9793.  
  9794.  move.l d1,d3 ;    z cos
  9795.  move.l d3,d6
  9796.  move.l d3,d5
  9797.  asr.l #1,d6
  9798.  add.l d6,d3
  9799.  asr.l #1,d3
  9800.  
  9801.  move.l d2,d4    ; z sin
  9802.  move.l d4,d6
  9803.  asr.l #1,d6
  9804.  add.l d4,d6
  9805.  add.l d3,d4
  9806.  neg.l d4    ; start x
  9807.  
  9808.  asr.l #1,d6    ; zsin/2
  9809.  sub.l d6,d5    ; start z
  9810.  
  9811.  add.l sxoff,d4
  9812.  add.l szoff,d5
  9813.  
  9814.  tst.b FULLSCR
  9815.  beq.s .nob
  9816.  
  9817.  moveq #0,d6
  9818.  move.w leftedge(pc),d6
  9819.  beq.s .nomultleftB
  9820.  
  9821.  add.l d6,d6
  9822.  divs #3,d6
  9823.  ext.l d6
  9824.  
  9825.  move.l d1,a4
  9826.  move.l d2,a5
  9827.  
  9828.  muls.l d6,d1
  9829.  asr.l #7,d1
  9830.  add.l d1,d4
  9831.  
  9832.  muls.l d6,d2
  9833.  asr.l #7,d2
  9834.  add.l d2,d5
  9835.  move.l a4,d1
  9836.  move.l a5,d2
  9837.  
  9838.  move.w leftedge(pc),d6
  9839.  
  9840. .nomultleftB:
  9841.  
  9842.  move.w d4,startsmoothx
  9843.  move.w d5,startsmoothz
  9844.  
  9845.  asr.l #8,d4
  9846.  asl.l #8,d5
  9847. ; add.w szoff,d5
  9848. ; add.w sxoff,d4
  9849. ; and.w #63,d4
  9850. ; and.w #63*256,d5
  9851.  
  9852.  move.w d4,d5
  9853.  
  9854.  asr.l #6,d1
  9855.  asr.l #6,d2
  9856.  divs.l #3,d1
  9857.  divs.l #3,d2
  9858.  
  9859.  bra.s doneallmult
  9860.  
  9861. .nob 
  9862.  
  9863.  moveq #0,d6
  9864.  move.w leftedge(pc),d6
  9865.  beq.s nomultleft
  9866.  
  9867.  move.l d1,a4
  9868.  move.l d2,a5
  9869.  
  9870.  muls.l d6,d1
  9871.  asr.l #7,d1
  9872.  add.l d1,d4
  9873.  
  9874.  muls.l d6,d2
  9875.  asr.l #7,d2
  9876.  add.l d2,d5
  9877.  move.l a4,d1
  9878.  move.l a5,d2
  9879.  
  9880.  move.w leftedge(pc),d6
  9881.  
  9882. nomultleft:
  9883.  
  9884.  move.w d4,startsmoothx
  9885.  move.w d5,startsmoothz
  9886.  
  9887.  asr.l #8,d4
  9888.  asl.l #8,d5
  9889.  
  9890.  
  9891. ; add.w szoff,d5
  9892. ; add.w sxoff,d4
  9893. ; and.w #63,d4
  9894. ; and.w #63*256,d5
  9895.  
  9896.  move.w d4,d5
  9897.  
  9898.  asr.l #7,d1
  9899.  asr.l #7,d2
  9900. ; divs.l #3,d1
  9901. ; divs.l #3,d2
  9902.  
  9903. doneallmult:
  9904.  
  9905.  move.w d1,a4
  9906.  move.w d2,a5
  9907.  asl.l #8,d2
  9908. ; and.w #%0011111100000000,d2
  9909.  asr.l #8,d1
  9910.  move.w d1,d2
  9911.  ifeq CHEESEY
  9912.  move.l #$3fff3fff,d1
  9913.  endc
  9914.  ifne CHEESEY
  9915.  move.l #$1fff1fff,d1
  9916.  endc
  9917.  and.l d1,d5
  9918. ; swap d5
  9919. ; move.w startsmoothz,d5
  9920. ; swap d5
  9921. ; swap d2
  9922. ; move.w a5,d2
  9923. ; swap d2
  9924.  
  9925. ***********************************
  9926.  
  9927.  
  9928.  tst.b DOUBLEWIDTH
  9929.  beq.s .nodoub
  9930.  
  9931.  and.b #$fe,d6
  9932.  
  9933.  move.w d6,a2
  9934.  moveq #0,d0 
  9935.  move.w rightedge(pc),d3 
  9936.  lea (a3,a2.w),a3 
  9937.  move.w d3,d7
  9938.  sub.w a2,d7
  9939.  asr.w #1,d7
  9940.  move.w startsmoothx,d3
  9941.  
  9942.  tst.b usewater
  9943.  bne texturedwaterDOUB
  9944. ; tst.b gourfloor
  9945.  bra gouraudfloorDOUB
  9946.  
  9947. .nodoub:
  9948.  
  9949.  move.w d6,a2
  9950.  moveq #0,d0 
  9951.  move.w rightedge(pc),d3 
  9952.  lea (a3,a2.w),a3 
  9953.  move.w d3,d7
  9954.  sub.w a2,d7
  9955.  
  9956. intofirststrip:
  9957. allintofirst:
  9958.  
  9959.  move.w startsmoothx,d3
  9960.  
  9961. tstwat:
  9962.  
  9963.  tst.b usewater
  9964.  bne texturedwater
  9965. ; tst.b gourfloor
  9966.  bra gouraudfloor
  9967.  
  9968.  
  9969.  
  9970. ******************************
  9971. * BumpMap the floor/ceiling! *
  9972.  tst.b usebumps
  9973.  bne.s BumpMap
  9974. ******************************
  9975.  
  9976. ordinary:
  9977.  moveq #0,d0
  9978.  
  9979.  dbra d7,acrossscrn
  9980.  rts
  9981.  
  9982. usebumps: dc.w $0
  9983. smoothbumps: dc.w $0
  9984. gourfloor: dc.w 0
  9985.  
  9986.  include "ab3:source_4000/bumpmap.s"
  9987.  
  9988.  CNOP 0,4
  9989. backbefore:
  9990.  and.w d1,d5
  9991.  move.b (a0,d5.w*4),d0
  9992.  add.w a4,d3
  9993.  addx.l d6,d5
  9994.  move.w (a1,d0.w*2),(a3)
  9995.  addq #4,a3
  9996.  dbcs d7,acrossscrn
  9997.  dbcc d7,backbefore
  9998.  bra.s past1
  9999.  
  10000. acrossscrn:
  10001.  and.w d1,d5
  10002.  move.b (a0,d5.w*4),d0
  10003.  add.w a4,d3
  10004.  addx.l d2,d5
  10005.  move.w (a1,d0.w*2),(a3)
  10006.  addq #4,a3
  10007.  dbcs d7,acrossscrn
  10008.  dbcc d7,backbefore
  10009. past1:
  10010.  bcc.s gotoacross
  10011.  
  10012.  move.w d4,d7
  10013.  bne.s .notdoneyet
  10014.  rts
  10015. .notdoneyet:
  10016.  
  10017.  cmp.w #32,d7
  10018.  ble.s .notoowide
  10019.  move.w #32,d7
  10020. .notoowide
  10021.  sub.w d7,d4  
  10022.  addq #4,a3
  10023.  
  10024.  dbra d7,backbefore
  10025.  rts
  10026.  
  10027.  
  10028. gotoacross:
  10029.  
  10030.  move.w d4,d7
  10031.  bne.s .notdoneyet
  10032.  rts
  10033. .notdoneyet:
  10034.  
  10035.  cmp.w #32,d7
  10036.  ble.s .notoowide
  10037.  move.w #32,d7
  10038. .notoowide
  10039.  sub.w d7,d4  
  10040.  addq #4,a3
  10041.  
  10042.  dbra d7,acrossscrn
  10043.  rts
  10044.  
  10045. leftbright: dc.l 0
  10046. brightspd: dc.l 0
  10047.  
  10048. gouraudfloor:
  10049.  
  10050.  move.w leftbright,d0
  10051.  move.l d1,d4
  10052.  move.w brightspd,d1
  10053.  
  10054.  move.w d7,d3
  10055.  asr.w #1,d7
  10056.  btst #0,d3
  10057.  beq.s .nosingle1
  10058.  move.w d5,d3
  10059.  move.l d5,d6
  10060.  lsr.w #8,d3
  10061.  swap d6
  10062.  move.b d3,d6
  10063.  move.w d0,d3
  10064.  ifeq CHEESEY
  10065.  move.b (a0,d6.w*4),d3
  10066.  endc
  10067.  ifne CHEESEY
  10068.  move.b (a0,d6.w),d3
  10069.  endc
  10070.  
  10071.  add.w d1,d0
  10072.  add.l d2,d5
  10073.  and.l d4,d5
  10074.  move.b (a1,d3.w),(a3)+
  10075. .nosingle1
  10076.  
  10077.  move.w d7,d3
  10078.  asr.w #1,d7
  10079.  btst #0,d3
  10080.  beq.s .nosingle2
  10081.  move.w d5,d3
  10082.  move.l d5,d6
  10083.  lsr.w #8,d3
  10084.  swap d6
  10085.  move.b d3,d6
  10086.  move.w d0,d3
  10087.  ifeq CHEESEY
  10088.  move.b (a0,d6.w*4),d3
  10089.  endc
  10090.  ifne CHEESEY
  10091.  move.b (a0,d6.w),d3
  10092.  endc
  10093.  add.w d1,d0
  10094.  add.l d2,d5
  10095.  and.l d4,d5
  10096.  move.l d5,d6
  10097.  swap d6
  10098.  move.b (a1,d3.w),(a3)+
  10099.  move.w d5,d3
  10100.  lsr.w #8,d3
  10101.  move.b d3,d6
  10102.  move.w d0,d3
  10103.  ifeq CHEESEY
  10104.  move.b (a0,d6.w*4),d3
  10105.  endc
  10106.  ifne CHEESEY
  10107.  move.b (a0,d6.w),d3
  10108.  endc
  10109.  add.w d1,d0
  10110.  add.l d2,d5
  10111.  and.l d4,d5
  10112.  move.b (a1,d3.w),(a3)+
  10113.  
  10114. .nosingle2
  10115.  
  10116.  move.l d5,d6
  10117.  swap d6
  10118.  
  10119.  dbra d7,acrossscrngour
  10120.  rts
  10121.  
  10122.  CNOP 0,4
  10123.  
  10124. acrossscrngour:
  10125.  move.w d5,d3
  10126.  lsr.w #8,d3
  10127.  move.b d3,d6
  10128.  move.w d0,d3
  10129.  ifeq CHEESEY
  10130.  move.b (a0,d6.w*4),d3
  10131.  endc
  10132.  ifne CHEESEY
  10133.  move.b (a0,d6.w),d3
  10134.  endc
  10135.  add.w d1,d0
  10136.  add.l d2,d5
  10137.  and.l d4,d5
  10138.  move.l d5,d6
  10139.  swap d6
  10140.  move.b (a1,d3.w),(a3)+
  10141.  move.w d5,d3
  10142.  lsr.w #8,d3
  10143.  move.b d3,d6
  10144.  move.w d0,d3
  10145.  ifeq CHEESEY
  10146.  move.b (a0,d6.w*4),d3
  10147.  endc
  10148.  ifne CHEESEY
  10149.  move.b (a0,d6.w),d3
  10150.  endc
  10151.  add.w d1,d0
  10152.  add.l d2,d5
  10153.  and.l d4,d5
  10154.  move.l d5,d6
  10155.  swap d6
  10156.  move.b (a1,d3.w),(a3)+
  10157.  move.w d5,d3
  10158.  lsr.w #8,d3
  10159.  move.b d3,d6
  10160.  move.w d0,d3
  10161.  ifeq CHEESEY
  10162.  move.b (a0,d6.w*4),d3
  10163.  endc
  10164.  ifne CHEESEY
  10165.  move.b (a0,d6.w),d3
  10166.  endc
  10167.  add.w d1,d0
  10168.  add.l d2,d5
  10169.  and.l d4,d5
  10170.  move.l d5,d6
  10171.  swap d6
  10172.  move.b (a1,d3.w),(a3)+
  10173.  move.w d5,d3
  10174.  lsr.w #8,d3
  10175.  move.b d3,d6
  10176.  move.w d0,d3
  10177.  ifeq CHEESEY
  10178.  move.b (a0,d6.w*4),d3
  10179.  endc
  10180.  ifne CHEESEY
  10181.  move.b (a0,d6.w),d3
  10182.  endc
  10183.  add.w d1,d0
  10184.  add.l d2,d5
  10185.  and.l d4,d5
  10186.  move.l d5,d6
  10187.  swap d6
  10188.  move.b (a1,d3.w),(a3)+
  10189.  dbra d7,acrossscrngour
  10190.  
  10191.  rts
  10192.  
  10193.  
  10194. gouraudfloorDOUB:
  10195.  
  10196.  move.w leftbright,d0
  10197.  move.l d1,d4
  10198.  move.w brightspd,d1
  10199.  add.w d1,d1
  10200.  add.l d2,d2
  10201.  
  10202.  move.w d7,d3
  10203.  asr.w #1,d7
  10204.  btst #0,d3
  10205.  beq.s .nosingle1
  10206.  move.w d5,d3
  10207.  move.l d5,d6
  10208.  lsr.w #8,d3
  10209.  swap d6
  10210.  move.b d3,d6
  10211.  move.w d0,d3
  10212.  ifeq CHEESEY
  10213.  move.b (a0,d6.w*4),d3
  10214.  endc
  10215.  ifne CHEESEY
  10216.  move.b (a0,d6.w),d3
  10217.  endc
  10218.  add.w d1,d0
  10219.  add.l d2,d5
  10220.  and.l d4,d5
  10221.  move.w (a1,d3.w),(a3)+
  10222. .nosingle1
  10223.  
  10224.  move.w d7,d3
  10225.  asr.w #1,d7
  10226.  btst #0,d3
  10227.  beq.s .nosingle2
  10228.  move.w d5,d3
  10229.  move.l d5,d6
  10230.  lsr.w #8,d3
  10231.  swap d6
  10232.  move.b d3,d6
  10233.  move.w d0,d3
  10234.  ifeq CHEESEY
  10235.  move.b (a0,d6.w*4),d3
  10236.  endc
  10237.  ifne CHEESEY
  10238.  move.b (a0,d6.w),d3
  10239.  endc
  10240.  add.w d1,d0
  10241.  add.l d2,d5
  10242.  and.l d4,d5
  10243.  move.l d5,d6
  10244.  swap d6
  10245.  move.w (a1,d3.w),(a3)+
  10246.  move.w d5,d3
  10247.  lsr.w #8,d3
  10248.  move.b d3,d6
  10249.  move.w d0,d3
  10250.  ifeq CHEESEY
  10251.  move.b (a0,d6.w*4),d3
  10252.  endc
  10253.  ifne CHEESEY
  10254.  move.b (a0,d6.w),d3
  10255.  endc
  10256.  add.w d1,d0
  10257.  add.l d2,d5
  10258.  and.l d4,d5
  10259.  move.w (a1,d3.w),(a3)+
  10260.  
  10261. .nosingle2
  10262.  
  10263.  move.l d5,d6
  10264.  swap d6
  10265.  
  10266.  dbra d7,acrossscrngourD
  10267.  rts
  10268.  
  10269.  CNOP 0,4
  10270.  
  10271. acrossscrngourD:
  10272.  move.w d5,d3
  10273.  lsr.w #8,d3
  10274.  move.b d3,d6
  10275.  move.w d0,d3
  10276.  ifeq CHEESEY
  10277.  move.b (a0,d6.w*4),d3
  10278.  endc
  10279.  ifne CHEESEY
  10280.  move.b (a0,d6.w),d3
  10281.  endc
  10282.  add.w d1,d0
  10283.  add.l d2,d5
  10284.  and.l d4,d5
  10285.  move.l d5,d6
  10286.  swap d6
  10287.  move.w (a1,d3.w),(a3)+
  10288.  move.w d5,d3
  10289.  lsr.w #8,d3
  10290.  move.b d3,d6
  10291.  move.w d0,d3
  10292.  ifeq CHEESEY
  10293.  move.b (a0,d6.w*4),d3
  10294.  endc
  10295.  ifne CHEESEY
  10296.  move.b (a0,d6.w),d3
  10297.  endc
  10298.  add.w d1,d0
  10299.  add.l d2,d5
  10300.  and.l d4,d5
  10301.  move.l d5,d6
  10302.  swap d6
  10303.  move.w (a1,d3.w),(a3)+
  10304.  move.w d5,d3
  10305.  lsr.w #8,d3
  10306.  move.b d3,d6
  10307.  move.w d0,d3
  10308.  ifeq CHEESEY
  10309.  move.b (a0,d6.w*4),d3
  10310.  endc
  10311.  ifne CHEESEY
  10312.  move.b (a0,d6.w),d3
  10313.  endc
  10314.  add.w d1,d0
  10315.  add.l d2,d5
  10316.  and.l d4,d5
  10317.  move.l d5,d6
  10318.  swap d6
  10319.  move.w (a1,d3.w),(a3)+
  10320.  move.w d5,d3
  10321.  lsr.w #8,d3
  10322.  move.b d3,d6
  10323.  move.w d0,d3
  10324.  ifeq CHEESEY
  10325.  move.b (a0,d6.w*4),d3
  10326.  endc
  10327.  ifne CHEESEY
  10328.  move.b (a0,d6.w),d3
  10329.  endc
  10330.  add.w d1,d0
  10331.  add.l d2,d5
  10332.  and.l d4,d5
  10333.  move.l d5,d6
  10334.  swap d6
  10335.  move.w (a1,d3.w),(a3)+
  10336.  dbra d7,acrossscrngourD
  10337.  
  10338.  rts
  10339.  
  10340.  
  10341. ;backbeforegour:
  10342. ; and.w #63*256+63,d5
  10343. ; move.b (a0,d5.w*4),d0
  10344. ; add.l d1,d0
  10345. ; bcc.s .nomoreb
  10346. ; add.w #256,d0
  10347. ;.nomoreb:
  10348. ; add.w a4,d3
  10349. ; move.w (a1,d0.w*2),(a3)+
  10350. ; addx.l d6,d5
  10351. ; dbcs d7,acrossscrngour
  10352. ; dbcc d7,backbeforegour
  10353. ; rts
  10354. ; bra.s past1gour
  10355.  
  10356. ;acrossscrngour:
  10357. ; and.l #$3f3f,d5 
  10358. ; move.b (a0,d5.w*4),d0
  10359. ; add.l d1,d0
  10360. ; bcc.s .nomoreb
  10361. ; add.w #256,d0
  10362. ;.nomoreb:
  10363. ; add.w a4,d3
  10364. ; move.w (a1,d0.w*2),(a3)+
  10365. ; addx.l d2,d5
  10366. ; dbcs d7,acrossscrngour
  10367. ; dbcc d7,backbeforegour
  10368. ;past1gour:
  10369. ; rts
  10370.  
  10371.  move.w d4,d7
  10372.  bne.s .notdoneyet
  10373.  move.l d0,leftbright
  10374.  
  10375.  rts
  10376. .notdoneyet:
  10377.  
  10378.  cmp.w #32,d7
  10379.  ble.s .notoowide
  10380.  move.w #32,d7
  10381. .notoowide
  10382.  sub.w d7,d4  
  10383.  addq #4,a3
  10384.  
  10385. ; dbra d7,backbeforegour
  10386.  rts
  10387.  
  10388.  
  10389. gotoacrossgour:
  10390.  
  10391.  move.w d4,d7
  10392.  bne.s .notdoneyet
  10393.  rts
  10394. .notdoneyet:
  10395.  
  10396.  cmp.w #32,d7
  10397.  ble.s .notoowide
  10398.  move.w #32,d7
  10399. .notoowide
  10400.  sub.w d7,d4  
  10401.  addq #4,a3
  10402.  
  10403.  dbra d7,acrossscrngour
  10404.  rts
  10405.  
  10406.  
  10407. waterpt: dc.l waterlist
  10408.  
  10409. waterlist:
  10410.  dc.l waterfile
  10411.  dc.l waterfile+2
  10412.  dc.l waterfile+256
  10413.  dc.l waterfile+256+2
  10414.  dc.l waterfile+512
  10415.  dc.l waterfile+512+2
  10416.  dc.l waterfile+768
  10417.  dc.l waterfile+768+2
  10418. ; dc.l waterfile+768
  10419. ; dc.l waterfile+512+2
  10420. ; dc.l waterfile+512
  10421. ; dc.l waterfile+256+2
  10422. ; dc.l waterfile+256
  10423. ; dc.l waterfile+2
  10424. endwaterlist:
  10425.  
  10426. watertouse: dc.l waterfile
  10427.  
  10428. wtan: dc.w 0
  10429. wateroff: dc.l 0
  10430.  
  10431. REFLECTIONWATER:
  10432.  
  10433.  move.l d1,d4
  10434.  
  10435.  add.l wateroff,d5
  10436.  
  10437.  move.l TexturePal,a1
  10438.  add.l #256*16,a1
  10439.  move.l dst,d0
  10440.  clr.b d0
  10441.  
  10442.  add.w d0,d0
  10443.  cmp.w #12*512,d0
  10444.  blt.s .notoowater
  10445.  move.w #12*512,d0
  10446.  
  10447. .notoowater:
  10448.   
  10449.  adda.w d0,a1
  10450.  
  10451.  move.l dst,d0
  10452.  asl.w #7,d0
  10453.  add.w wtan,d0
  10454.  and.w #8191,d0
  10455.  move.l #SineTable,a0
  10456.  move.w (a0,d0.w),d0
  10457.  ext.l d0
  10458.  
  10459.  move.l dst,d3
  10460.  add.w #300,d3
  10461.  divs d3,d0
  10462.  asr.w #5,d0
  10463.  addq #4,d0
  10464.  cmp.w disttobot,d0
  10465.  blt.s oknotoffbotototr
  10466.  
  10467.  move.w disttobot,d0
  10468.  subq #1,d0
  10469.  
  10470. oknotoffbotototr
  10471.  
  10472. ; move.w dst,d3
  10473. ; asr.w #7,d3
  10474. ; add.w d3,d0
  10475.  
  10476.  muls #320,d0
  10477.  tst.w above
  10478.  beq.s nonnnnnegr
  10479.  neg.l d0
  10480.  
  10481. nonnnnnegr:
  10482.  
  10483.  move.l d0,a6
  10484.  
  10485.  move.l watertouse,a0
  10486.  
  10487. ; move.l #mixtab,a5
  10488.  
  10489.  moveq #0,d1
  10490.  
  10491.  move.w startsmoothx,d3
  10492.  dbra d7,acrossscrnwr
  10493.  rts
  10494.  
  10495. backbeforewr:
  10496.  and.w d1,d5 
  10497.  move.w (a0,d5.w*4),d0
  10498.  move.b (a3,a6.w),d0
  10499.  move.w (a1,d0.w),(a3)+
  10500.  add.w a4,d3
  10501.  addx.l d6,d5
  10502.  dbcs d7,acrossscrnwr
  10503.  dbcc d7,backbeforewr
  10504.  rts
  10505.  
  10506. acrossscrnwr:
  10507.  move.w d5,d3
  10508.  move.l d5,d6
  10509.  lsr.w #8,d3
  10510.  swap d6
  10511.  move.b d3,d6
  10512.  move.w (a0,d6.w*4),d0
  10513.  add.l d2,d5
  10514.  move.w (a4,a6.w),d1
  10515.  addq #2,a4
  10516.  move.b (a3,a6.w),d1
  10517.  move.b (a5,d1.l),d0
  10518.  and.l d4,d5
  10519.  move.w (a1,d0.w),(a3)+
  10520.  dbra d7,acrossscrnwr
  10521.  rts
  10522.  
  10523. texturedwater:
  10524.  
  10525.  move.l d1,d4
  10526.  
  10527.  add.l wateroff,d5
  10528.  
  10529.  move.l TexturePal,a1
  10530.  add.l #256*16,a1
  10531.  move.l dst,d0
  10532.  asr.l #2,d0
  10533.  clr.b d0
  10534.  
  10535.  add.w d0,d0
  10536.  cmp.w #9*512,d0
  10537.  blt.s .notoowater
  10538.  move.w #9*512,d0
  10539. .notoowater:
  10540.   
  10541.  adda.w d0,a1
  10542.  
  10543.  move.l dst,d0
  10544.  asl.w #7,d0
  10545.  add.w wtan,d0
  10546.  and.w #8191,d0
  10547.  move.l #SineTable,a0
  10548.  move.w (a0,d0.w),d0
  10549.  ext.l d0
  10550.  
  10551.  move.l dst,d3
  10552.  add.w #300,d3
  10553.  divs d3,d0
  10554.  asr.w #5,d0
  10555.  addq #4,d0
  10556.  cmp.w disttobot,d0
  10557.  blt.s oknotoffbototot
  10558.  
  10559.  move.w disttobot,d0
  10560.  subq #1,d0
  10561.  
  10562. oknotoffbototot
  10563.  
  10564. ; move.w dst,d3
  10565. ; asr.w #7,d3
  10566. ; add.w d3,d0
  10567.  
  10568.  tst.b DOUBLEHEIGHT
  10569.  beq.s .nodoub
  10570.  and.b #$fe,d0
  10571. .nodoub:
  10572.  
  10573.  muls #320,d0
  10574.  tst.w above
  10575.  beq.s nonnnnneg
  10576.  neg.l d0
  10577.  
  10578. nonnnnneg:
  10579.  
  10580.  move.l d0,a6
  10581.  
  10582.  move.l watertouse,a0
  10583.  
  10584.  move.w startsmoothx,d3
  10585.  dbra d7,acrossscrnw
  10586.  rts
  10587.  
  10588. backbeforew:
  10589.  and.w d1,d5
  10590.  move.w (a0,d5.w*4),d0
  10591.  add.w d0,d0
  10592.  move.b (a3,a6.w),d0
  10593.  move.b (a1,d0.w),(a3)+
  10594.  add.w a4,d3
  10595.  addx.l d6,d5
  10596.  dbcs d7,acrossscrnw
  10597.  dbcc d7,backbeforew
  10598.  rts
  10599.  
  10600. acrossscrnw:
  10601.  move.w d5,d3
  10602.  move.l d5,d6
  10603.  lsr.w #8,d3
  10604.  swap d6
  10605.  move.b d3,d6
  10606.  move.w (a0,d6.w*4),d0
  10607.  add.w d0,d0
  10608.  add.l d2,d5
  10609.  move.b (a3,a6.w),d0
  10610.  and.l d4,d5
  10611.  move.b (a1,d0.w),(a3)+
  10612.  dbra d7,acrossscrnw
  10613.  rts
  10614.  
  10615.  
  10616. texturedwaterDOUB:
  10617.  
  10618.  move.l d1,d4
  10619.  
  10620.  add.l wateroff,d5
  10621.  
  10622.  move.l TexturePal,a1
  10623.  add.l #256*16,a1
  10624.  move.l dst,d0
  10625.  asr.l #2,d0
  10626.  clr.b d0
  10627.  
  10628.  add.w d0,d0
  10629.  cmp.w #9*512,d0
  10630.  blt.s .notoowater
  10631.  move.w #9*512,d0
  10632. .notoowater:
  10633.   
  10634.  adda.w d0,a1
  10635.  
  10636.  move.l dst,d0
  10637.  asl.w #7,d0
  10638.  add.w wtan,d0
  10639.  and.w #8191,d0
  10640.  move.l #SineTable,a0
  10641.  move.w (a0,d0.w),d0
  10642.  ext.l d0
  10643.  
  10644.  move.l dst,d3
  10645.  add.w #300,d3
  10646.  divs d3,d0
  10647.  asr.w #5,d0
  10648.  addq #4,d0
  10649.  cmp.w disttobot,d0
  10650.  blt.s .oknotoffbototot
  10651.  
  10652.  move.w disttobot,d0
  10653.  subq #1,d0
  10654.  
  10655. .oknotoffbototot
  10656.  
  10657. ; move.w dst,d3
  10658. ; asr.w #7,d3
  10659. ; add.w d3,d0
  10660.  
  10661.  tst.b DOUBLEHEIGHT
  10662.  beq.s .nodoub
  10663.  and.b #$fe,d0
  10664. .nodoub:
  10665.  
  10666.  muls #320,d0
  10667.  tst.w above
  10668.  beq.s .nonnnnneg
  10669.  neg.l d0
  10670.  
  10671. .nonnnnneg:
  10672.  
  10673.  move.l d0,a6
  10674.  
  10675.  move.l watertouse,a0
  10676.  
  10677.  add.l d2,d2
  10678.  
  10679.  move.w startsmoothx,d3
  10680.  dbra d7,acrossscrnwD
  10681.  rts
  10682.  
  10683.  
  10684. acrossscrnwD:
  10685.  move.w d5,d3
  10686.  move.l d5,d6
  10687.  lsr.w #8,d3
  10688.  swap d6
  10689.  move.b d3,d6
  10690.  move.w (a0,d6.w*4),d0
  10691.  add.w d0,d0
  10692.  add.l d2,d5
  10693.  move.b (a3,a6.w),d0
  10694.  and.l d4,d5
  10695.  move.w (a1,d0.w),(a3)+
  10696.  dbra d7,acrossscrnwD
  10697.  rts
  10698.  
  10699.  
  10700. usewater: dc.w 0
  10701.  dc.w 0
  10702. startsmoothx: dc.w 0
  10703.  dc.w 0
  10704. startsmoothz: dc.w 0
  10705.  
  10706. ********************************
  10707. *
  10708.  include "AB3:source_4000/ObjDrawHIRES.s"
  10709. *
  10710. ********************************
  10711.  
  10712. numframes:
  10713.  dc.w 0
  10714.  
  10715. alframe: dc.l 0
  10716.  
  10717. alan:
  10718.  dcb.l 8,0
  10719.  dcb.l 8,1
  10720.  dcb.l 8,2
  10721.  dcb.l 8,3
  10722. endalan:
  10723.  
  10724. alanptr: dc.l alan
  10725.  
  10726. Time2: dc.l 0
  10727. dispco:
  10728.  dc.w 0
  10729.  
  10730.  
  10731. key_readkey:
  10732.  moveq #0,d0
  10733.  move.b lastpressed,d0
  10734.  move.b #0,lastpressed
  10735.  rts
  10736.  
  10737. key_interrupt:
  10738. ;        movem.l    d0-d7/a0-a6,-(sp)
  10739.  
  10740. ;        move.w    INTREQR,d0
  10741. ;        btst    #3,d0
  10742. ;        beq    .not_key
  10743.  
  10744.         move.b    $bfdd00,d0
  10745.         btst    #0,d0
  10746.         bne    .key_cont
  10747. ;        move.b    $bfed01,d0
  10748. ;        btst    #0,d0
  10749. ;        bne    .key_cont
  10750.     
  10751. ;        btst    #3,d0
  10752. ;        beq    .key_cont
  10753.  
  10754.         move.b    $bfec01,d0
  10755.         clr.b    $bfec01
  10756.  
  10757.         tst.b    d0
  10758.         beq    .key_cont
  10759.  
  10760. ;        bset    #6,$bfee01
  10761. ;        move.b    #$f0,$bfe401
  10762. ;        move.b    #$00,$bfe501
  10763. ;        bset    #0,$bfee01
  10764.  
  10765.  
  10766.         not.b    d0
  10767.         ror.b    #1,d0
  10768.         lea.l    KeyMap,a0
  10769.         tst.b    d0
  10770.         bmi.b    .key_up
  10771.         and.w    #$7f,d0
  10772. ;        add.w    #1,d0
  10773.         move.b    #$ff,(a0,d0.w)
  10774.         move.b    d0,lastpressed
  10775.  
  10776.         bra.b    .key_cont2
  10777. .key_up:
  10778.         and.w    #$7f,d0
  10779. ;        add.w    #1,d0
  10780.         move.b    #$00,(a0,d0.w)
  10781.  
  10782. .key_cont2
  10783. ;        btst    #0,$bfed01
  10784. ;        beq    .key_cont2
  10785. ;        move.b    #%00000000,$bfee01
  10786. ;        move.b    #%10001000,$bfed01
  10787.  
  10788. ;alt keys should not be independent so overlay ralt on lalt
  10789.  
  10790.         
  10791. .key_cont
  10792.  
  10793. ;        move.w    #$0008,INTREQ
  10794. .not_key:    ;lea.l    $dff000,a5
  10795.  
  10796. ;        lea.l    _keypressed(pc),a0
  10797. ;        move.b    101(a0),d0    ;read LALT
  10798. ;        or.b    102(a0),d0    ;blend it with RALT
  10799. ;        move.b    d0,127(a0)    ;save in combined position
  10800.  
  10801. ;        movem.l    (sp)+,d0-d7/a0-a6
  10802.         move.w #0,d0
  10803.         tst.w d0
  10804.  
  10805.         rts
  10806.  
  10807. lastpressed:    dc.b 0
  10808. KInt_CCode    Ds.b    1
  10809. KInt_Askey    Ds.b    1
  10810. KInt_OCode    Ds.w    1
  10811.  
  10812.  
  10813. OldSpace: dc.b 0
  10814. SpaceTapped: dc.b 0
  10815. PLR1_SPCTAP: dc.b 0
  10816. PLR2_SPCTAP: dc.b 0
  10817. PLR1_Ducked: dc.b 0
  10818. PLR2_Ducked: dc.b 0
  10819.  even
  10820.  
  10821. PLR1_Squished: dc.w 0
  10822. PLR2_Squished: dc.w 0
  10823. PLR1s_SquishedHeight: dc.l 0
  10824. PLR2s_SquishedHeight: dc.l 0
  10825.  
  10826.  include "ab3:source_4000/PLR1CONTROL.s"
  10827.  include "ab3:source_4000/PLR2CONTROL.s"
  10828.  include "ab3:source_4000/FALL.s"
  10829.  
  10830.  
  10831.  
  10832. *******************************************8
  10833.  
  10834. nullmessage: dcb.b 160,' '
  10835.  
  10836. SENDMESSAGENORET
  10837.  move.l a1,-(a7)
  10838.  bra intosend
  10839.  
  10840. SENDMESSAGE:
  10841.  
  10842.  move.l a1,-(a7)
  10843.  
  10844.  move.l MESSPTR,a1
  10845.  move.l d0,(a1)+
  10846.  cmp.l #ENDMESSBUFF,a1
  10847.  blt.s .okinbuff
  10848.  move.l #MESSAGEBUFFER,a1
  10849. .okinbuff:
  10850.  move.l a1,MESSPTR
  10851.  move.l a1,LASTMESSPTR
  10852.  
  10853. intosend:
  10854.  
  10855.  move.l d0,SCROLLPOINTER
  10856.  move.w #0,SCROLLXPOS
  10857.  add.l #160,d0
  10858.  move.l d0,ENDSCROLL
  10859.  move.w #40,SCROLLTIMER
  10860.  
  10861.  move.l (a7)+,a1
  10862.  rts
  10863.  
  10864. RETRIEVEPREVMESSAGE:
  10865.  
  10866.  move.l LASTMESSPTR,a1
  10867.  cmp.l #MESSAGEBUFFER,a1
  10868.  bgt.s .okinbuff
  10869.  
  10870.  move.l #ENDMESSBUFF,a1
  10871.  
  10872. .okinbuff:
  10873.  
  10874.  move.l -(a1),d0
  10875.  beq.s .nomessage
  10876.  
  10877.  move.l d0,SCROLLPOINTER
  10878.  move.w #0,SCROLLXPOS
  10879.  add.l #160,d0
  10880.  move.l d0,ENDSCROLL
  10881.  move.w #40,SCROLLTIMER
  10882.  
  10883.  move.l a1,LASTMESSPTR
  10884.  
  10885. .nomessage:
  10886.  
  10887.  
  10888.  rts
  10889.  
  10890. MESSAGEBUFFER:
  10891.  ds.l 20
  10892. ENDMESSBUFF:
  10893.  
  10894. MESSPTR: dc.l MESSAGEBUFFER
  10895. LASTMESSPTR: dc.l MESSAGEBUFFER
  10896.  
  10897. **********************************************
  10898.  
  10899.  
  10900.  
  10901. prot7: dc.w 0
  10902.  
  10903. GOTTOSEND: dc.w 0
  10904.  
  10905. COUNTER: dc.w 0
  10906. COUNTER2: dc.w 0
  10907. COUNTSPACE: ds.b 160
  10908.  
  10909. OtherInter:
  10910.  move.w #$0010,$dff000+intreq
  10911.  movem.l d0-d7/a0-a6,-(a7)
  10912.  bra justshake
  10913.  
  10914.     cnop 0,4
  10915.  
  10916. BlitterInterrupt:
  10917.  
  10918.  movem.l d0-d7/a0-a6,-(a7)
  10919.  move.w    #$0040,$dff09c        ; Clear REQ bits
  10920.  
  10921.  move.l main_bltint,d0
  10922.  beq.s .noint
  10923.  move.l d0,a0
  10924.  jsr (a0)
  10925. .noint:
  10926.  movem.l (a7)+,d0-d7/a0-a6
  10927.  
  10928.  rts
  10929.  
  10930. Chan0inter:
  10931.  
  10932.     add.l #1,counter
  10933.     add.l #1,main_counter
  10934.     tst.l timer
  10935.     beq.s .nodec
  10936.     subq.l #1,timer    
  10937. .nodec:
  10938.  
  10939.     SAVEREGS
  10940.     jsr    .routine
  10941.  
  10942.     move.l main_vblint,d0
  10943.     beq.s .noint
  10944.         move.l d0,a0
  10945.         jsr (a0)    
  10946. .noint:
  10947.  
  10948.     GETREGS
  10949. ;    move.w    #1024+'.',$dff030
  10950.     
  10951.     moveq #1,d0
  10952.     rts
  10953.  
  10954. .routine
  10955.  
  10956.     
  10957. ;w move.w #$0010,$dff000+intreq
  10958.  
  10959.  tst.b doanything
  10960.  bne dosomething
  10961.  
  10962.  movem.l d0-d7/a0-a6,-(a7)
  10963.  bra JUSTSOUNDS
  10964.  
  10965.  rts
  10966.  
  10967. tabheld: dc.w 0
  10968. ObjWork: ds.l 600
  10969. WORKPTR: dc.l 0
  10970. thistime: dc.w 0
  10971.  
  10972. DOALLANIMS:
  10973.  
  10974.  sub.b #1,thistime
  10975.  ble.s .okdosome
  10976.  rts
  10977.  
  10978. .okdosome:
  10979.  move.b #5,thistime
  10980.  
  10981.  
  10982.  move.l #ObjWork,a5
  10983.  move.l ObjectData,a0
  10984. Objectloop2:
  10985.  tst.w (a0)
  10986.  blt doneallobj2
  10987.  move.w 12(a0),d0
  10988.  blt doneobj2
  10989.  move.w d0,GraphicRoom(a0)
  10990.  tst.b worry(a0)
  10991.  beq.s doneobj2
  10992.  
  10993.  move.b 16(a0),d0
  10994.  cmp.b #1,d0
  10995.  blt JUMPALIENANIM
  10996. ; beq JUMPOBJECTANIM
  10997. ; cmp.b #2,d0
  10998. ; beq JUMPBULLET
  10999.  
  11000. doneobj2:
  11001.  
  11002.  adda.w #64,a0
  11003.  addq #8,a5
  11004.  bra Objectloop2
  11005.  
  11006. doneallobj2:
  11007.  rts
  11008.  
  11009. JUMPALIENANIM:
  11010.  
  11011.  moveq #0,d0
  11012.  move.b WhichAnim(a0),d0
  11013. ; 0=walking
  11014. ; 1=attacking
  11015. ; 2=getting hit
  11016. ; 3=dying
  11017.  
  11018.  cmp.b #1,d0
  11019.  blt.s ALWALK
  11020.  beq.s ALATTACK
  11021.  
  11022.  cmp.b #3,d0
  11023.  blt ALGETHIT
  11024.  beq ALDIE
  11025.  
  11026.  bra doneobj2
  11027.  
  11028. ALDIE
  11029.  move.l #10,d0
  11030.  bra intowalk
  11031.  
  11032. ALGETHIT:
  11033.  move.l #9,d0
  11034.  bra intowalk
  11035.  
  11036. ALATTACK:
  11037.  move.l #8,d0
  11038.  bra intowalk
  11039.  
  11040. AUXOBJ: dc.w 0
  11041.  
  11042. ALWALK:
  11043.  
  11044. ; jsr ViewpointToDraw
  11045. ; add.l d0,d0
  11046. ; move.l LINKFILE,a6
  11047. ; add.l #AlienStats,a6
  11048. ; moveq #0,d1
  11049. ; move.b TypeOfThing(a0),d1
  11050. ; muls #AlienStatLen,d1
  11051. ; add.l d1,a6
  11052. ; cmp.w #1,A_GFXType(a6)
  11053. ; bne.s NOSIDES2
  11054.  
  11055.  moveq #0,d0
  11056. intowalk:
  11057.  
  11058. NOSIDES2:
  11059.  
  11060.  move.b d0,2(a5)
  11061.  move.l LINKFILE,a6
  11062.  
  11063.  add.l #AlienAnimData,a6
  11064.  
  11065.  moveq #0,d1
  11066.  move.b TypeOfThing(a0),d1
  11067.  move.w .valtables+4(pc,d1.w*8),d1
  11068. ; muls #A_AnimLen,d1
  11069.  add.l d1,a6
  11070.  
  11071. ; move.l ANIMPOINTER,a6
  11072.  
  11073. ; muls #A_OptLen,d0
  11074.  move.w .valtables+2(pc,d0.w*8),d0
  11075.  add.w d0,a6
  11076.  
  11077.  move.w SecTimer(a0),d1
  11078.  move.w d1,d2
  11079. ; muls #A_FrameLen,d1
  11080.  move.w .valtables(pc,d1.w*8),d1
  11081.  
  11082.  moveq #0,d0
  11083.  move.b 5(a6,d1.w),d0
  11084.  beq.s .nosoundmake
  11085.  
  11086.  movem.l d0-d7/a0-a6,-(a7)
  11087.  subq #1,d0
  11088.  move.w d0,Samplenum
  11089.  clr.b notifplaying
  11090.  move.w (a0),IDNUM
  11091.  move.w #80,Noisevol
  11092.  move.l #ObjRotated,a1
  11093.  move.w (a0),d0
  11094.  lea (a1,d0.w*8),a1
  11095.  move.l (a1),Noisex
  11096.  jsr MakeSomeNoise
  11097.  movem.l (a7)+,d0-d7/a0-a6
  11098. .nosoundmake
  11099.  
  11100.  move.b 6(a6,d1.w),d0
  11101.  beq.s .noaction
  11102.  add.b #1,(a5)
  11103.  move.b d2,1(a5)
  11104. .noaction
  11105.  
  11106.  addq #1,d2
  11107.  
  11108.  moveq #0,d0
  11109.  move.b 7(a6,d1.w),d0
  11110.  beq .nospecial
  11111.  bra .special
  11112.  
  11113. .valtables:
  11114. val SET 0
  11115.  REPT 20
  11116.  dc.w A_FrameLen*val,A_OptLen*val
  11117.  dc.w A_AnimLen*val,0
  11118. val SET val+1
  11119.  ENDR
  11120.  
  11121. .special
  11122.  move.b d0,d3
  11123.  and.w #63,d3
  11124.  lsr.w #6,d0
  11125.  cmp.w #2,d0
  11126.  blt.s .storeval
  11127.  beq.s .randval
  11128.  
  11129.  sub.b #1,4(a5)
  11130.  beq.s .nospecial
  11131.  
  11132.  move.w d3,d2
  11133.  bra.s .nospecial
  11134.  
  11135. .randval:
  11136.  jsr GetRand
  11137.  divs d3,d0
  11138.  swap d0
  11139.  move.w d0,d3
  11140.  
  11141. .storeval:
  11142.  move.b d3,4(a5)
  11143. .nospecial:
  11144.  
  11145. ; move.w d2,d3
  11146.  move.w .valtables2(pc,d2.w*8),d3
  11147. ; muls #A_FrameLen,d3
  11148.  tst.b (a6,d3.w)
  11149.  bge.s .noendanim
  11150.  st 3(a5)
  11151.  move.w #0,d2
  11152. .noendanim
  11153.  move.w d2,SecTimer(a0)
  11154.  
  11155.  bra doneobj2
  11156.  
  11157. .valtables2:
  11158. val SET 0
  11159.  REPT 20
  11160.  dc.w A_FrameLen*val,A_OptLen*val
  11161.  dc.w A_AnimLen*val,0
  11162. val SET val+1
  11163.  ENDR
  11164.  
  11165.  
  11166. JUMPOBJECTANIM:
  11167.  bra doneobj2
  11168.  
  11169. timetodamage: dc.w 0
  11170. SAVESAVE: dc.w 0
  11171.  
  11172. dosomething:
  11173.  
  11174.  
  11175.  
  11176.  addq.w #1,FramesToDraw
  11177.  movem.l d0-d7/a0-a6,-(a7)
  11178.  
  11179.  jsr NARRATOR
  11180.  
  11181.  bsr DOALLANIMS
  11182.  
  11183.  sub.w #1,timetodamage
  11184.  bgt.s .nodam
  11185.  
  11186.  move.w #100,timetodamage
  11187.  
  11188.  move.l PLR1_Roompt,a0
  11189.  move.w ToFloorNoise(a0),d0
  11190.  tst.b PLR1_StoodInTop
  11191.  beq.s .okinbot
  11192.  move.w ToUpperFloorNoise(a0),d0
  11193. .okinbot:
  11194.  
  11195.  move.l LINKFILE,a0
  11196.  add.l #FloorData,a0
  11197.  move.w (a0,d0.w*4),d0    ; damage. 
  11198.  move.l PLR1_Obj,a0
  11199.  add.b d0,damagetaken(a0)
  11200.  
  11201.  move.l PLR2_Roompt,a0
  11202.  move.w ToFloorNoise(a0),d0
  11203.  tst.b PLR2_StoodInTop
  11204.  beq.s .okinbot2
  11205.  move.w ToUpperFloorNoise(a0),d0
  11206. .okinbot2:
  11207.  
  11208.  move.l LINKFILE,a0
  11209.  add.l #FloorData,a0
  11210.  move.w (a0,d0.w*4),d0    ; damage. 
  11211.  
  11212.  move.l PLR2_Obj,a0
  11213.  add.b d0,damagetaken(a0)
  11214.  
  11215. .nodam:
  11216.  
  11217.  move.l #KeyMap,a5
  11218.  
  11219.  tst.b 82(a5)    ;f3
  11220.  beq notogglesound
  11221.  
  11222.  tst.b lasttogsound
  11223.  bne notogglesound2
  11224.  
  11225.  st lasttogsound
  11226.  
  11227.  move.w TOPPOPT,d0
  11228.  addq #1,d0
  11229.  and.w #3,d0
  11230.  move.w d0,TOPPOPT
  11231.  move.b STEROPT(pc,d0.w*2),STEREO
  11232.  
  11233.  
  11234.  move.b STEROPT+1(pc,d0.w*2),d1
  11235.  muls #160,d0
  11236.  add.l #SOUNDOPTSTEXT,d0
  11237.  jsr SENDMESSAGE
  11238.  
  11239.  
  11240.  move.b d1,Prefsfile+1
  11241.  
  11242.  bra pastster
  11243.  
  11244.  STEROPT:
  11245.  dc.b 0,4
  11246.  dc.b $FF,4
  11247.  dc.b 0,8
  11248.  dc.b $ff,8
  11249.  
  11250. lasttogsound: dc.w 0
  11251.  
  11252. SOUNDOPTSTEXT:
  11253. ;      1234567890123456789012345678901234567890
  11254.  dc.b "Four Channel Mono Selected              "
  11255.  dc.b "                                        "
  11256.  dc.b "                                        "
  11257.  dc.b "                                        "
  11258.  
  11259.  dc.b "Four Channel Stereo Selected            "
  11260.  dc.b "                                        "
  11261.  dc.b "                                        "
  11262.  dc.b "                                        "
  11263.  
  11264.  dc.b "Eight Channel Mono Selected             "
  11265.  dc.b "                                        "
  11266.  dc.b "                                        "
  11267.  dc.b "                                        "
  11268.  
  11269.  dc.b "Eight Channel Stereo Selected           "
  11270.  dc.b "                                        "
  11271.  dc.b "                                        "
  11272.  dc.b "                                        "
  11273.  
  11274. LIGHTING: dc.w $FFff
  11275. OLDLTOG: dc.w 0
  11276.  
  11277. pastster:
  11278.  
  11279.  cmp.b #'4',d1
  11280.  seq.s CHANNELDATA+8
  11281.  seq.s CHANNELDATA+12
  11282.  seq.s CHANNELDATA+24
  11283.  seq.s CHANNELDATA+28
  11284.  
  11285. * Mt_init *********************
  11286.  st CHANNELDATA+8
  11287.  st CHANNELDATA
  11288. *******************************
  11289.  
  11290.  move.w #$f,$dff000+dmacon
  11291.  move.l #null,$dff0a0
  11292.  move.w #100,$dff0a4
  11293.  move.w #443,$dff0a6
  11294.  move.w #63,$dff0a8
  11295.  
  11296.  move.l #null2,$dff0b0
  11297.  move.w #100,$dff0b4
  11298.  move.w #443,$dff0b6
  11299.  move.w #63,$dff0b8
  11300.  
  11301.  move.l #null4,$dff0c0
  11302.  move.w #100,$dff0c4
  11303.  move.w #443,$dff0c6
  11304.  move.w #63,$dff0c8
  11305.  
  11306.  move.l #null3,$dff0d0
  11307.  move.w #100,$dff0d4
  11308.  move.w #443,$dff0d6
  11309.  move.w #63,$dff0d8
  11310.  
  11311.  move.l #empty,pos0LEFT
  11312.  move.l #empty,pos1LEFT
  11313.  move.l #empty,pos2LEFT
  11314.  move.l #empty,pos3LEFT
  11315.  move.l #empty,pos0RIGHT
  11316.  move.l #empty,pos1RIGHT
  11317.  move.l #empty,pos2RIGHT
  11318.  move.l #empty,pos3RIGHT
  11319.  move.l #emptyend,Samp0endLEFT
  11320.  move.l #emptyend,Samp1endLEFT
  11321.  move.l #emptyend,Samp2endLEFT
  11322.  move.l #emptyend,Samp3endLEFT
  11323.  move.l #emptyend,Samp0endRIGHT
  11324.  move.l #emptyend,Samp1endRIGHT
  11325.  move.l #emptyend,Samp2endRIGHT
  11326.  move.l #emptyend,Samp3endRIGHT
  11327.  
  11328.  move.w #10,d3
  11329. .willy
  11330.  btst #0,$dff000+intreqrl
  11331.  beq.s .willy
  11332.  move.w #1,$dff000+intreq
  11333.  
  11334.  dbra d3,.willy
  11335.  
  11336.  move.w #$820f,$dff000+dmacon
  11337.  
  11338.  bra notogglesound2
  11339.  
  11340. Prefsfile:
  11341.  dc.b 'k4nx'
  11342.  
  11343. notogglesound:
  11344.  clr.b lasttogsound
  11345. notogglesound2:
  11346.  
  11347.  
  11348.  tst.b 83(a5)
  11349.  beq nolighttoggle
  11350.  tst.b OLDLTOG
  11351.  bne nolighttoggle2
  11352.  st OLDLTOG
  11353.  
  11354.  move.l #LIGHTINGTEXT,d0
  11355.  not.b LIGHTING
  11356.  beq.s .noon
  11357.  add.l #160,d0
  11358. .noon:
  11359.  bra pastlighttext
  11360.  
  11361. LIGHTINGTEXT:
  11362.  dc.b "Lighting Effects Deactivated            "
  11363.  dc.b "                                        "
  11364.  dc.b "                                        "
  11365.  dc.b "                                        "
  11366.  
  11367.  dc.b "Lighting Effects Activated              "
  11368.  dc.b "                                        "
  11369.  dc.b "                                        "
  11370.  dc.b "                                        "
  11371.  
  11372. OLDRET: dc.w 0
  11373. OLDCENT: dc.w 0
  11374. OLDGOOD: dc.w 0
  11375.  
  11376. GOODRENDERTXT:
  11377.  dc.b "Rendering Quality : High                "
  11378.  dc.b "                                        "
  11379.  dc.b "                                        "
  11380.  dc.b "                                        "
  11381. BADRENDERTXT:
  11382.  dc.b "Rendering Quality : Reduced             "
  11383.  dc.b "                                        "
  11384.  dc.b "                                        "
  11385.  dc.b "                                        "
  11386.  
  11387. pastlighttext:
  11388.  
  11389.  jsr SENDMESSAGE
  11390.  
  11391. ; move.l d0,SCROLLPOINTER
  11392. ; move.w #0,SCROLLXPOS
  11393. ; add.l #160,d0
  11394. ; move.l d0,ENDSCROLL
  11395. ; move.w #40,SCROLLTIMER 
  11396.  
  11397.  bra nolighttoggle2
  11398.  
  11399. nolighttoggle:
  11400.  clr.b OLDLTOG
  11401. nolighttoggle2:
  11402.  
  11403.  
  11404.  tst.b 84(a5)
  11405.  beq.s noret
  11406.  tst.b OLDRET
  11407.  bne.s noret2
  11408.  st OLDRET
  11409.  
  11410.  jsr RETRIEVEPREVMESSAGE
  11411.  
  11412.  bra noret2
  11413.  
  11414. noret
  11415.  clr.b OLDRET
  11416. noret2:
  11417.  
  11418.  tst.b 85(a5)
  11419.  beq.s .nogood
  11420.  tst.b OLDGOOD
  11421.  bne.s .nogood2
  11422.  st OLDGOOD
  11423.  
  11424.  move.l #GOODRENDERTXT,d0
  11425.  not.b GOODRENDER
  11426.  bne.s .okgood
  11427.  move.l #BADRENDERTXT,d0
  11428. .okgood:
  11429.  
  11430.  jsr SENDMESSAGE
  11431.  
  11432.  bra .nogood2
  11433.  
  11434. .nogood
  11435.  clr.b OLDGOOD
  11436. .nogood2:
  11437.  
  11438.  
  11439.  tst.b $42(a5)
  11440.  bne.s .tabprsd
  11441.  clr.b tabheld
  11442.  bra.s .noswitch
  11443.  
  11444. .tabprsd:
  11445.  tst.b tabheld
  11446.  bne.s .noswitch
  11447.  not.b MAPON
  11448.  st tabheld
  11449. .noswitch
  11450.  
  11451.  tst.b $3e(a5)
  11452.  sne d0
  11453.  tst.b $1e(a5)
  11454.  sne d1
  11455.  tst.b $2d(a5)
  11456.  sne d2
  11457.  tst.b $2f(a5)
  11458.  sne d3
  11459.  
  11460.  tst.b $3d(a5)
  11461.  sne d4
  11462.  tst.b $3f(a5)
  11463.  sne d5
  11464.  tst.b $1d(a5)
  11465.  sne d6
  11466.  tst.b $1f(a5)
  11467.  sne d7
  11468.  
  11469.  or.b d4,d0
  11470.  or.b d5,d0
  11471.  or.b d6,d1
  11472.  or.b d7,d1
  11473.  or.b d4,d2
  11474.  or.b d6,d2
  11475.  or.b d7,d3
  11476.  or.b d5,d3
  11477.  
  11478.  move.w MAPBRIGHT,d4
  11479.  add.w #2,d4
  11480.  clr.l d5
  11481.  bset d4,d5
  11482.  
  11483.  tst.b d0
  11484.  beq.s .nomapup
  11485.  sub.w d5,mapzoff
  11486. .nomapup 
  11487.  
  11488.  tst.b d1
  11489.  beq.s .nomapdown
  11490.  add.w d5,mapzoff
  11491. .nomapdown 
  11492.  
  11493.  tst.b d2
  11494.  beq.s .nomapleft
  11495.  add.w d5,mapxoff
  11496. .nomapleft 
  11497.  
  11498.  tst.b d3
  11499.  beq.s .nomapright
  11500.  sub.w d5,mapxoff
  11501. .nomapright 
  11502.  
  11503.  tst.b $2e(a5)
  11504.  beq.s .nomapcentre
  11505.  
  11506.  move.w #0,mapxoff
  11507.  move.w #0,mapzoff
  11508.  
  11509. .nomapcentre
  11510.  
  11511. ; move.w STOPOFFSET,d0
  11512. ; tst.b 27(a5)
  11513. ; beq.s .nolookup
  11514. ; sub.w #5,d0
  11515. ; cmp.w #-80,d0
  11516. ; bgt.s .nolookup
  11517. ; move.w #-80,d0
  11518. ;.nolookup:
  11519. ; tst.b 42(a5)
  11520. ; beq.s .nolookdown
  11521. ; add.w #5,d0
  11522. ; cmp.w #80,d0
  11523. ; blt.s .nolookdown
  11524. ; move.w #80,d0
  11525. ;.nolookdown:
  11526. ;
  11527. ; move.w d0,STOPOFFSET
  11528. ; neg.w d0
  11529. ; add.w #120,d0
  11530. ; move.w d0,SMIDDLEY
  11531. ; muls #320*2,d0
  11532. ; move.l d0,SBIGMIDDLEY
  11533.  
  11534.  
  11535. ; jsr INITREC
  11536. ; jsr RECEIVE
  11537.  
  11538. ; tst.l BUFFER
  11539. ; beq.s justshake
  11540. ; st GOTTOSEND
  11541. ; move.l #OtherInter,$6c
  11542.  
  11543. justshake:
  11544.  
  11545. ; cmp.b #'b',Prefsfile+3
  11546. ; bne.s .noback
  11547.  
  11548.  
  11549.  jsr mt_music
  11550.  
  11551.  
  11552.  
  11553. ;.noback:
  11554.  
  11555.  bra dontshowtime
  11556.  
  11557.  tst.b oktodisplay
  11558.  beq dontshowtime
  11559.  clr.b oktodisplay
  11560.  subq.w #1,dispco
  11561.  bgt dontshowtime
  11562.  move.w #10,dispco
  11563.  
  11564.  move.l #TimerScr+10,a0
  11565.  move.l TimeCount,d0
  11566.  bge.s timenotneg
  11567.  move.l #1111*256,d0
  11568. timenotneg:
  11569.  asr.l #8,d0
  11570.  move.l #digits,a1
  11571.  move.w #7,d2
  11572. digitlop
  11573.  divs #10,d0
  11574.  swap d0
  11575.  lea (a1,d0.w*8),a2
  11576.  move.b (a2)+,(a0)
  11577.  move.b (a2)+,24(a0)
  11578.  move.b (a2)+,24*2(a0)
  11579.  move.b (a2)+,24*3(a0)
  11580.  move.b (a2)+,24*4(a0)
  11581.  move.b (a2)+,24*5(a0)
  11582.  move.b (a2)+,24*6(a0)
  11583.  move.b (a2)+,24*7(a0)
  11584.  subq #1,a0
  11585.  swap d0
  11586.  ext.l d0
  11587.  dbra d2,digitlop
  11588.  
  11589.  move.l #TimerScr+10+24*10,a0
  11590.  move.l NumTimes,d0
  11591.  move.l #digits,a1
  11592.  move.w #3,d2
  11593. digitlop2
  11594.  divs #10,d0
  11595.  swap d0
  11596.  lea (a1,d0.w*8),a2
  11597.  move.b (a2)+,(a0)
  11598.  move.b (a2)+,24(a0)
  11599.  move.b (a2)+,24*2(a0)
  11600.  move.b (a2)+,24*3(a0)
  11601.  move.b (a2)+,24*4(a0)
  11602.  move.b (a2)+,24*5(a0)
  11603.  move.b (a2)+,24*6(a0)
  11604.  move.b (a2)+,24*7(a0)
  11605.  subq #1,a0
  11606.  swap d0
  11607.  ext.l d0
  11608.  dbra d2,digitlop2
  11609.  
  11610.  move.l #TimerScr+10+24*20,a0
  11611.  moveq #0,d0
  11612.  move.w FramesToDraw,d0
  11613.  move.l #digits,a1
  11614.  move.w #2,d2
  11615. digitlop3
  11616.  divs #10,d0
  11617.  swap d0
  11618.  lea (a1,d0.w*8),a2
  11619.  move.b (a2)+,(a0)
  11620.  move.b (a2)+,24(a0)
  11621.  move.b (a2)+,24*2(a0)
  11622.  move.b (a2)+,24*3(a0)
  11623.  move.b (a2)+,24*4(a0)
  11624.  move.b (a2)+,24*5(a0)
  11625.  move.b (a2)+,24*6(a0)
  11626.  move.b (a2)+,24*7(a0)
  11627.  subq #1,a0
  11628.  swap d0
  11629.  ext.l d0
  11630.  dbra d2,digitlop3
  11631.  
  11632. dontshowtime:
  11633.  
  11634.  
  11635.  move.l alanptr,a0
  11636.  move.l (a0)+,alframe
  11637.  cmp.l #endalan,a0
  11638.  blt.s nostartalan
  11639.  move.l #alan,a0
  11640. nostartalan:
  11641.  move.l a0,alanptr
  11642.  
  11643.  
  11644.  tst.b READCONTROLS
  11645.  beq nocontrols
  11646.  
  11647.  cmp.b #'s',mors
  11648.  beq control2
  11649.  
  11650.  tst.w PLAYERONEHEALTH
  11651.  bgt .propercontrol
  11652.  
  11653.  move.l #7*2116,hitcol
  11654.  move.l PLR1_Obj,a0
  11655.  move.w #-1,12+128(a0)
  11656.  
  11657.  clr.b PLR1_fire
  11658.  clr.b PLR1_clicked
  11659.  move.w #0,ADDTOBOBBLE
  11660.  move.l #playercrouched,PLR1s_height
  11661.  move.w #-80,d0
  11662.  move.w d0,STOPOFFSET
  11663.  neg.w d0
  11664.  add.w TOTHEMIDDLE,d0
  11665.  move.w d0,SMIDDLEY
  11666.  muls #320,d0
  11667.  move.l d0,SBIGMIDDLEY
  11668.  jsr PLR1_fall
  11669.  
  11670.  move.l PLR1s_xspdval,d6
  11671.  move.l PLR1s_zspdval,d7
  11672.  
  11673.  tst.b SLOWDOWN
  11674.  beq.s .nofriction
  11675.  
  11676.  neg.l d6
  11677.  ble.s .nobug1
  11678.  asr.l #3,d6
  11679.  add.l #1,d6
  11680.  bra.s .bug1
  11681. .nobug1
  11682.  asr.l #3,d6
  11683. .bug1:
  11684.  
  11685.  neg.l d7
  11686.  ble.s .nobug2
  11687.  asr.l #3,d7
  11688.  add.l #1,d7
  11689.  bra.s .bug2
  11690. .nobug2
  11691.  asr.l #3,d7
  11692. .bug2: 
  11693.  
  11694.  add.l d6,PLR1s_xspdval
  11695.  add.l d7,PLR1s_zspdval
  11696.  
  11697. .nofriction:
  11698.  move.l PLR1s_xspdval,d6
  11699.  move.l PLR1s_zspdval,d7
  11700.  add.l d6,PLR1s_xoff
  11701.  add.l d7,PLR1s_zoff
  11702.  
  11703.  move.w PLR1s_angspd,d3
  11704.  tst.b SLOWDOWN
  11705.  beq.s .nofric
  11706.  asr.w #2,d3
  11707.  bge.s .nneg
  11708.  addq #1,d3
  11709. .nneg:
  11710. .nofric:
  11711.  
  11712.  move.w d3,PLR1s_angspd
  11713.  add.w d3,PLR1s_angpos
  11714.  add.w d3,PLR1s_angpos
  11715.  and.w #8190,PLR1s_angpos
  11716.  
  11717.  bra nocontrols
  11718.  
  11719. .propercontrol:
  11720.  
  11721.  tst.b PLR1MOUSE
  11722.  beq.s PLR1_nomouse
  11723.  bsr PLR1_mouse_control
  11724. PLR1_nomouse:
  11725.  tst.b PLR1KEYS
  11726.  beq.s PLR1_nokeys
  11727.  bsr PLR1_keyboard_control
  11728. PLR1_nokeys:
  11729. ; tst.b PLR1PATH
  11730. ; beq.s PLR1_nopath
  11731. ; bsr PLR1_follow_path
  11732. ;PLR1_nopath:
  11733.  tst.b PLR1JOY
  11734.  beq.s PLR1_nojoy
  11735.  bsr PLR1_JoyStick_control
  11736. PLR1_nojoy: 
  11737.  bra nocontrols
  11738.  
  11739. control2:
  11740.  
  11741.  tst.w PLAYERTWOHEALTH
  11742.  bgt .propercontrol
  11743.  
  11744.  move.l #7*2116,hitcol
  11745.  move.l PLR1_Obj,a0
  11746.  move.w #-1,12+128(a0)
  11747.  clr.b PLR2_fire
  11748.  move.w #0,ADDTOBOBBLE
  11749.  move.l #playercrouched,PLR2s_height
  11750.  move.w #-80,d0
  11751.  move.w d0,STOPOFFSET
  11752.  neg.w d0
  11753.  add.w TOTHEMIDDLE,d0
  11754.  move.w d0,SMIDDLEY
  11755.  muls #320,d0
  11756.  move.l d0,SBIGMIDDLEY
  11757.  jsr PLR2_fall
  11758.  
  11759.  move.l PLR2s_xspdval,d6
  11760.  move.l PLR2s_zspdval,d7
  11761.  
  11762.  tst.b SLOWDOWN
  11763.  beq.s .nofriction
  11764.  
  11765.  neg.l d6
  11766.  ble.s .nobug1
  11767.  asr.l #3,d6
  11768.  add.l #1,d6
  11769.  bra.s .bug1
  11770. .nobug1
  11771.  asr.l #3,d6
  11772. .bug1:
  11773.  
  11774.  neg.l d7
  11775.  ble.s .nobug2
  11776.  asr.l #3,d7
  11777.  add.l #1,d7
  11778.  bra.s .bug2
  11779. .nobug2
  11780.  asr.l #3,d7
  11781. .bug2: 
  11782.  
  11783.  add.l d6,PLR2s_xspdval
  11784.  add.l d7,PLR2s_zspdval
  11785.  
  11786. .nofriction:
  11787.  move.l PLR2s_xspdval,d6
  11788.  move.l PLR2s_zspdval,d7
  11789.  add.l d6,PLR2s_xoff
  11790.  add.l d7,PLR2s_zoff
  11791.  
  11792.  move.w PLR2s_angspd,d3
  11793.  tst.b SLOWDOWN
  11794.  beq.s .nofric
  11795.  asr.w #2,d3
  11796.  bge.s .nneg
  11797.  addq #1,d3
  11798. .nneg:
  11799. .nofric:
  11800.  
  11801.  move.w d3,PLR2s_angspd
  11802.  add.w d3,PLR2s_angpos
  11803.  add.w d3,PLR2s_angpos
  11804.  and.w #8190,PLR2s_angpos
  11805.  
  11806.  bra.s nocontrols
  11807.  
  11808. .propercontrol:
  11809.  tst.b PLR2MOUSE
  11810.  beq.s PLR2_nomouse
  11811.  bsr PLR2_mouse_control
  11812. PLR2_nomouse:
  11813.  tst.b PLR2KEYS
  11814.  beq.s PLR2_nokeys
  11815.  bsr PLR2_keyboard_control
  11816. PLR2_nokeys:
  11817. ; tst.b PLR2PATH
  11818. ; beq.s PLR2_nopath
  11819. ; bsr PLR1_follow_path
  11820. ;PLR2_nopath:
  11821.  tst.b PLR2JOY
  11822.  beq.s PLR2_nojoy
  11823.  bsr PLR2_JoyStick_control
  11824. PLR2_nojoy: 
  11825.  
  11826.  
  11827. nocontrols:
  11828.  
  11829.  move.l #$dff000,a6
  11830.  
  11831.  tst.b dosounds
  11832.  beq.s nomuckabout
  11833.  
  11834.  cmp.b #'4',Prefsfile+1
  11835.  bne.s nomuckabout
  11836.  
  11837.  move.w #$0,d0 
  11838.  tst.b NoiseMade0LEFT
  11839.  beq.s noturnoff0
  11840.  move.w #1,d0
  11841. noturnoff0:
  11842.  tst.b NoiseMade0RIGHT
  11843.  beq.s noturnoff1
  11844.  or.w #2,d0
  11845. noturnoff1:
  11846.  tst.b NoiseMade1RIGHT
  11847.  beq.s noturnoff2
  11848.  or.w #4,d0
  11849. noturnoff2:
  11850.  tst.b NoiseMade1LEFT
  11851.  beq.s noturnoff3
  11852.  or.w #8,d0
  11853. noturnoff3:
  11854.  
  11855. *********************
  11856.  and.w #$fffe,d0
  11857. *********************
  11858.  
  11859.     move.w d0,dmacon(a6)
  11860.  
  11861. nomuckabout:
  11862.  
  11863.  
  11864. ; tst.b PLR2_fire
  11865. ; beq.s firenotpressed2
  11866. ; fire was pressed last time.
  11867. ; btst #7,$bfe001
  11868. ; bne.s firenownotpressed2
  11869. ; fire is still pressed this time.
  11870. ; st PLR2_fire
  11871. ; bra dointer
  11872.  
  11873. firenownotpressed2:
  11874. ; fire has been released.
  11875. ; clr.b PLR2_fire
  11876. ; bra dointer
  11877.  
  11878. firenotpressed2
  11879.  
  11880. ; fire was not pressed last frame...
  11881.  
  11882. ; btst #7,$bfe001
  11883. ; if it has still not been pressed, go back above
  11884. ; bne.s firenownotpressed2
  11885. ; fire was not pressed last time, and was this time, so has
  11886. ; been clicked.
  11887. ; st PLR2_clicked
  11888. ; st PLR2_fire
  11889.  
  11890. dointer
  11891.  
  11892. JUSTSOUNDS:
  11893.  
  11894.  tst.b dosounds
  11895.  beq.s .notthing
  11896.  
  11897.  cmp.b #'4',Prefsfile+1
  11898.     beq fourchannel
  11899.  
  11900.  btst #1,$dff000+intreqr
  11901.     bne.s newsampbitl
  11902.  
  11903. .notthing:
  11904.  
  11905. ; move.w #$f,$dff000+dmacon
  11906.  
  11907.  movem.l (a7)+,d0-d7/a0-a6
  11908.  
  11909.  moveq #0,d0
  11910.  rts
  11911.  
  11912.  
  11913. dosounds: dc.w 0
  11914.  
  11915. swappedem: dc.w 0
  11916.  
  11917. newsampbitl:
  11918.  
  11919.  
  11920.  
  11921.  move.w #$200,$dff000+intreq
  11922.  
  11923.  tst.b CHANNELDATA
  11924.  bne nochannel0
  11925.  
  11926.  move.l pos0LEFT,a0
  11927.  move.l pos2LEFT,a1
  11928.  
  11929.  move.l #tab,a2
  11930.  
  11931.  moveq #0,d0
  11932.  moveq #0,d1
  11933.  move.b vol0left,d0
  11934.  move.b vol2left,d1
  11935.  cmp.b d1,d0
  11936.  slt swappedem
  11937.  bge.s fbig0
  11938.  
  11939. ; d1 is bigger so scale d0 and use d1
  11940. ; as audiochannel volume.
  11941.  
  11942.  exg a0,a1
  11943.  asl.w #6,d0
  11944.  divs d1,d0
  11945.  lsl.w #8,d0
  11946.  adda.w d0,a2
  11947.  move.w d1,$dff0a8
  11948.  bra.s donechan0
  11949.  
  11950. fbig0:
  11951.  tst.w d0
  11952.  beq.s donechan0
  11953.  asl.w #6,d1
  11954.  divs d0,d1
  11955.  lsl.w #8,d1
  11956.  adda.w d1,a2
  11957.  move.w d0,$dff0a8
  11958.  
  11959. donechan0:
  11960.  
  11961.  move.l Aupt0,a3
  11962.  move.l a3,$dff0a0
  11963.  move.l Auback0,Aupt0
  11964.  move.l a3,Auback0
  11965.  
  11966.  move.l Auback0,a3
  11967.  
  11968.  moveq #0,d0
  11969.  moveq #0,d1
  11970.  moveq #0,d2
  11971.  moveq #0,d3
  11972.  moveq #0,d4
  11973.  moveq #0,d5
  11974.  move.w #49,d7
  11975. loop:
  11976.  move.l (a0)+,d0
  11977.  move.b (a1)+,d1
  11978.  move.b (a1)+,d2
  11979.  move.b (a1)+,d3
  11980.  move.b (a1)+,d4
  11981.  move.b (a2,d3.w),d5
  11982.  swap d5
  11983.  move.b (a2,d1.w),d5
  11984.  asl.l #8,d5
  11985.  move.b (a2,d2.w),d5
  11986.  swap d5
  11987.  move.b (a2,d4.w),d5
  11988.  add.l d5,d0
  11989.  move.l d0,(a3)+
  11990.  dbra d7,loop
  11991.  
  11992.  tst.b swappedem
  11993.  beq.s .ok23
  11994.  exg a0,a1
  11995. .ok23:
  11996.  
  11997.  cmp.l Samp0endLEFT,a0
  11998.  blt.s .notoffendsamp1
  11999.  move.l #empty,a0
  12000.  move.l #emptyend,Samp0endLEFT
  12001.  move.b #0,vol0left
  12002.  clr.w LEFTCHANDATA+32
  12003.  move.w #0,LEFTCHANDATA+2
  12004. .notoffendsamp1:
  12005.  
  12006.  cmp.l Samp2endLEFT,a1
  12007.  blt.s .notoffendsamp2
  12008.  move.l #empty,a1
  12009.  move.l #emptyend,Samp2endLEFT
  12010.  move.b #0,vol2left
  12011.  clr.w LEFTCHANDATA+32+8
  12012.  move.w #0,LEFTCHANDATA+2+8
  12013. .notoffendsamp2:
  12014.  
  12015.  move.l a0,pos0LEFT
  12016.  move.l a1,pos2LEFT
  12017.  
  12018. nochannel0:
  12019.  
  12020.  tst.b CHANNELDATA+16
  12021.  bne nochannel1
  12022.  
  12023.  
  12024.  move.l pos0RIGHT,a0
  12025.  move.l pos2RIGHT,a1
  12026.  
  12027.  move.l Aupt1,a3
  12028.  move.l a3,$dff0b0
  12029.  move.l Auback1,Aupt1
  12030.  move.l a3,Auback1
  12031.  
  12032.  move.l #tab,a2
  12033.  
  12034.  moveq #0,d0
  12035.  moveq #0,d1
  12036.  move.b vol0right,d0
  12037.  move.b vol2right,d1
  12038.  cmp.b d1,d0
  12039.  slt swappedem
  12040.  bge.s fbig1
  12041.  
  12042. ; d1 is bigger so scale d0 and use d1
  12043. ; as audiochannel volume.
  12044.  
  12045.  exg a0,a1
  12046.  asl.w #6,d0
  12047.  divs d1,d0
  12048.  lsl.w #8,d0
  12049.  adda.w d0,a2
  12050.  move.w d1,$dff0b8
  12051.  bra.s donechan1
  12052.  
  12053. fbig1:
  12054.  tst.w d0
  12055.  beq.s donechan1
  12056.  asl.w #6,d1
  12057.  divs d0,d1
  12058.  lsl.w #8,d1
  12059.  adda.w d1,a2
  12060.  move.w d0,$dff0b8
  12061.  
  12062. donechan1:
  12063.  moveq #0,d0
  12064.  moveq #0,d1
  12065.  moveq #0,d2
  12066.  moveq #0,d3
  12067.  moveq #0,d4
  12068.  moveq #0,d5
  12069.  move.w #49,d7
  12070. loop2:
  12071.  move.l (a0)+,d0
  12072.  move.b (a1)+,d1
  12073.  move.b (a1)+,d2
  12074.  move.b (a1)+,d3
  12075.  move.b (a1)+,d4
  12076.  move.b (a2,d3.w),d5
  12077.  swap d5
  12078.  move.b (a2,d1.w),d5
  12079.  asl.l #8,d5
  12080.  move.b (a2,d2.w),d5
  12081.  swap d5
  12082.  move.b (a2,d4.w),d5
  12083.  add.l d5,d0
  12084.  move.l d0,(a3)+
  12085.  dbra d7,loop2
  12086.  
  12087.  tst.b swappedem
  12088.  beq.s ok01
  12089.  exg a0,a1
  12090. ok01:
  12091.  
  12092.  cmp.l Samp0endRIGHT,a0
  12093.  blt.s .notoffendsamp1
  12094.  move.l #empty,a0
  12095.  move.l #emptyend,Samp0endRIGHT
  12096.  move.b #0,vol0right
  12097.  clr.w RIGHTCHANDATA+32
  12098.  move.w #0,RIGHTCHANDATA+2
  12099. .notoffendsamp1:
  12100.  
  12101.  cmp.l Samp2endRIGHT,a1
  12102.  blt.s .notoffendsamp2
  12103.  move.l #empty,a1
  12104.  move.l #emptyend,Samp2endRIGHT
  12105.  move.b #0,vol2right
  12106.  clr.w RIGHTCHANDATA+32+8
  12107.  move.w #0,RIGHTCHANDATA+2+8
  12108. .notoffendsamp2:
  12109.  
  12110.  move.l a0,pos0RIGHT
  12111.  move.l a1,pos2RIGHT
  12112.  
  12113. nochannel1:
  12114.  
  12115. ******************* Other two channels
  12116.  
  12117.  move.l pos1LEFT,a0
  12118.  move.l pos3LEFT,a1
  12119.  
  12120.  move.l #tab,a2
  12121.  
  12122.  moveq #0,d0
  12123.  moveq #0,d1
  12124.  move.b vol1left,d0
  12125.  move.b vol3left,d1
  12126.  cmp.b d1,d0
  12127.  slt swappedem
  12128.  bge.s fbig2
  12129.  
  12130. ; d1 is bigger so scale d0 and use d1
  12131. ; as audiochannel volume.
  12132.  
  12133.  exg a0,a1
  12134.  asl.w #6,d0
  12135.  divs d1,d0
  12136.  lsl.w #8,d0
  12137.  adda.w d0,a2
  12138.  move.w d1,$dff0d8
  12139.  bra.s donechan2
  12140.  
  12141. fbig2:
  12142.  tst.w d0
  12143.  beq.s donechan2
  12144.  asl.w #6,d1
  12145.  divs d0,d1
  12146.  lsl.w #8,d1
  12147.  adda.w d1,a2
  12148.  move.w d0,$dff0d8
  12149.  
  12150. donechan2:
  12151.  
  12152.  move.l Aupt2,a3
  12153.  move.l a3,$dff0d0
  12154.  move.l Auback2,Aupt2
  12155.  move.l a3,Auback2
  12156.  
  12157.  moveq #0,d0
  12158.  moveq #0,d1
  12159.  moveq #0,d2
  12160.  moveq #0,d3
  12161.  moveq #0,d4
  12162.  moveq #0,d5
  12163.  move.w #49,d7
  12164. loop3:
  12165.  move.l (a0)+,d0
  12166.  move.b (a1)+,d1
  12167.  move.b (a1)+,d2
  12168.  move.b (a1)+,d3
  12169.  move.b (a1)+,d4
  12170.  move.b (a2,d3.w),d5
  12171.  swap d5
  12172.  move.b (a2,d1.w),d5
  12173.  asl.l #8,d5
  12174.  move.b (a2,d2.w),d5
  12175.  swap d5
  12176.  move.b (a2,d4.w),d5
  12177.  add.l d5,d0
  12178.  move.l d0,(a3)+
  12179.  dbra d7,loop3
  12180.  
  12181.  tst.b swappedem
  12182.  beq.s .ok23
  12183.  exg a0,a1
  12184. .ok23:
  12185.  
  12186.  cmp.l Samp1endLEFT,a0
  12187.  blt.s .notoffendsamp3
  12188.  move.l #empty,a0
  12189.  move.l #emptyend,Samp1endLEFT
  12190.  move.b #0,vol1left
  12191.  clr.w LEFTCHANDATA+32+4
  12192.  move.w #0,LEFTCHANDATA+2+4
  12193. .notoffendsamp3:
  12194.  
  12195.  cmp.l Samp3endLEFT,a1
  12196.  blt.s .notoffendsamp4
  12197.  move.l #empty,a1
  12198.  move.l #emptyend,Samp3endLEFT
  12199.  move.b #0,vol3left
  12200.  clr.w LEFTCHANDATA+32+12
  12201.  move.w #0,LEFTCHANDATA+2+12
  12202. .notoffendsamp4:
  12203.  
  12204.  move.l a0,pos1LEFT
  12205.  move.l a1,pos3LEFT
  12206.  
  12207.  move.l pos1RIGHT,a0
  12208.  move.l pos3RIGHT,a1
  12209.  
  12210.  move.l Aupt3,a3
  12211.  move.l a3,$dff0c0
  12212.  move.l Auback3,Aupt3
  12213.  move.l a3,Auback3
  12214.  
  12215.  move.l #tab,a2
  12216.  
  12217.  moveq #0,d0
  12218.  moveq #0,d1
  12219.  move.b vol1right,d0
  12220.  move.b vol3right,d1
  12221.  cmp.b d1,d0
  12222.  slt.s swappedem
  12223.  bge.s fbig3
  12224.  
  12225.  exg a0,a1
  12226.  asl.w #6,d0
  12227.  divs d1,d0
  12228.  lsl.w #8,d0
  12229.  adda.w d0,a2
  12230.  move.w d1,$dff0c8
  12231.  bra.s donechan3
  12232.  
  12233. fbig3:
  12234.  tst.w d0
  12235.  beq.s donechan3
  12236.  asl.w #6,d1
  12237.  divs d0,d1
  12238.  lsl.w #8,d1
  12239.  adda.w d1,a2
  12240.  move.w d0,$dff0c8
  12241. donechan3:
  12242.  
  12243.  moveq #0,d0
  12244.  moveq #0,d1
  12245.  moveq #0,d2
  12246.  moveq #0,d3
  12247.  moveq #0,d4
  12248.  moveq #0,d5
  12249.  move.w #49,d7
  12250. loop4:
  12251.  move.l (a0)+,d0
  12252.  move.b (a1)+,d1
  12253.  move.b (a1)+,d2
  12254.  move.b (a1)+,d3
  12255.  move.b (a1)+,d4
  12256.  move.b (a2,d3.w),d5
  12257.  swap d5
  12258.  move.b (a2,d1.w),d5
  12259.  asl.l #8,d5
  12260.  move.b (a2,d2.w),d5
  12261.  swap d5
  12262.  move.b (a2,d4.w),d5
  12263.  add.l d5,d0
  12264.  move.l d0,(a3)+
  12265.  dbra d7,loop4
  12266.  
  12267.  tst.b swappedem
  12268.  beq.s .ok23
  12269.  exg a0,a1
  12270. .ok23:
  12271.  
  12272.  cmp.l Samp1endRIGHT,a0
  12273.  blt.s notoffendsamp3
  12274.  move.l #empty,a0
  12275.  move.l #emptyend,Samp1endRIGHT
  12276.  move.b #0,vol1right
  12277.  clr.w RIGHTCHANDATA+32+4
  12278.  move.w #0,RIGHTCHANDATA+2+4
  12279. notoffendsamp3:
  12280.  
  12281.  cmp.l Samp3endRIGHT,a1
  12282.  blt.s notoffendsamp4
  12283.  move.l #empty,a1
  12284.  move.l #emptyend,Samp3endRIGHT
  12285.  move.b #0,vol3right
  12286.  clr.w RIGHTCHANDATA+32+12
  12287.  move.w #0,RIGHTCHANDATA+2+12
  12288. notoffendsamp4:
  12289.  
  12290.  move.l a0,pos1RIGHT
  12291.  move.l a1,pos3RIGHT
  12292.  
  12293.  movem.l (a7)+,d0-d7/a0-a6
  12294. ; tst.b counting
  12295. ; beq .nostartcounter
  12296. ; JSR STARTCOUNT
  12297. ;.nostartcounter:
  12298.  
  12299.  move.w #$820f,$dff000+dmacon
  12300.  
  12301.  moveq #0,d0
  12302.  rts
  12303.  
  12304. ***********************************
  12305. * 4 channel sound routine
  12306. ***********************************
  12307.  
  12308. fourchannel:
  12309.  
  12310.  move.l #$dff000,a6
  12311.  
  12312.  tst.b LEFTCHANDATA
  12313.  bne.s NoChan0sound
  12314.  
  12315.  btst #7,intreqrl(a6)
  12316.  beq.s nofinish0
  12317. ; move.w #0,LEFTCHANDATA+2
  12318. ; st LEFTCHANDATA+1
  12319.  move.l #null,$a0(a6)
  12320.  move.w #100,$a4(a6) 
  12321.  move.w #$0080,intreq(a6)
  12322. nofinish0:
  12323.  
  12324.  tst.b NoiseMade0pLEFT
  12325.  beq.s NoChan0sound
  12326.  
  12327.  move.l Samp0endLEFT,d0
  12328.  move.l pos0LEFT,d1
  12329.  sub.l d1,d0
  12330.  lsr.l #1,d0
  12331.  move.w d0,$a4(a6)
  12332.  move.l d1,$a0(a6)
  12333.  ext.l d0
  12334.  divs #100,d0
  12335.  move.w d0,playnull0
  12336.  move.w #$8201,dmacon(a6)
  12337.  moveq #0,d0
  12338.  move.b vol0left,d0
  12339.  move.w d0,$a8(a6)
  12340.  
  12341. NoChan0sound:
  12342.  
  12343. *****************************************
  12344. *****************************************
  12345.  
  12346.  btst #0,intreqr(a6)
  12347.  beq.s nofinish1
  12348.  move.l #null,$b0(a6)
  12349.  move.w #100,$b4(a6)
  12350.  move.w #$0100,intreq(a6)
  12351. nofinish1:
  12352.  
  12353.  tst.b NoiseMade0pRIGHT
  12354.  beq.s NoChan1sound
  12355.  
  12356.  move.l Samp0endRIGHT,d0
  12357.  move.l pos0RIGHT,d1
  12358.  sub.l d1,d0
  12359.  lsr.l #1,d0
  12360.  move.w d0,$b4(a6)
  12361.  move.l d1,$b0(a6)
  12362.  ext.l d0
  12363.  divs #100,d0
  12364.  move.w d0,playnull1
  12365.  move.w #$8202,dmacon(a6)
  12366.  moveq #0,d0
  12367.  move.b vol0right,d0
  12368.  move.w d0,$b8(a6)
  12369.  
  12370. NoChan1sound:
  12371.  
  12372. *****************************************
  12373. *****************************************
  12374.  
  12375.  btst #1,intreqr(a6)
  12376.  beq.s nofinish2
  12377.  move.l #null,$c0(a6)
  12378.  move.w #100,$c4(a6)
  12379.  move.w #$0200,intreq(a6)
  12380. nofinish2:
  12381.  
  12382.  tst.b NoiseMade1pRIGHT
  12383.  beq.s NoChan2sound
  12384.  
  12385.  move.l Samp1endRIGHT,d0
  12386.  move.l pos1RIGHT,d1
  12387.  sub.l d1,d0
  12388.  lsr.l #1,d0
  12389.  move.w d0,$c4(a6)
  12390.  ext.l d0
  12391.  divs #100,d0
  12392.  move.w d0,playnull2
  12393.  
  12394.  move.l d1,$c0(a6)
  12395.  move.w #$8204,dmacon(a6)
  12396.  moveq #0,d0
  12397.  move.b vol1right,d0
  12398.  move.w d0,$c8(a6)
  12399.  
  12400. NoChan2sound:
  12401.  
  12402. *****************************************
  12403. *****************************************
  12404.  
  12405.  btst #2,intreqr(a6)
  12406.  beq.s nofinish3
  12407.  move.l #null,$d0(a6)
  12408.  move.w #100,$d4(a6)
  12409.  move.w #$0400,intreq(a6)
  12410. nofinish3:
  12411.  
  12412.  tst.b NoiseMade1pLEFT
  12413.  beq.s NoChan3sound
  12414.  
  12415.  move.l Samp1endLEFT,d0
  12416.  move.l pos1LEFT,d1
  12417.  sub.l d1,d0
  12418.  lsr.l #1,d0
  12419.  move.w d0,$d4(a6)
  12420.  ext.l d0
  12421.  divs #100,d0
  12422.  move.w d0,playnull3
  12423.  move.l d1,$d0(a6)
  12424.  move.w #$8208,dmacon(a6)
  12425.  moveq #0,d0
  12426.  move.b vol1left,d0
  12427.  move.w d0,$d8(a6)
  12428.  
  12429. NoChan3sound:
  12430.  
  12431. nomorechannels:
  12432.  
  12433.  move.l NoiseMade0LEFT,NoiseMade0pLEFT
  12434.  move.l #0,NoiseMade0LEFT
  12435.  move.l NoiseMade0RIGHT,NoiseMade0pRIGHT
  12436.  move.l #0,NoiseMade0RIGHT
  12437.  
  12438. ; tst.b playnull0
  12439. ; beq.s .nnul
  12440. ; sub.b #1,playnull0
  12441. ; bra.s chan0still
  12442. ;.nnul:
  12443. ;chan0still:
  12444.  
  12445.  tst.b NoiseMade0pLEFT
  12446.  bne.s chan0still
  12447.  tst.w playnull0
  12448.  beq.s nnul0
  12449.  sub.w #1,playnull0
  12450.  bra.s chan0still
  12451. nnul0:
  12452.  move.w #0,LEFTCHANDATA+2
  12453.  clr.w LEFTCHANDATA+32
  12454. chan0still:
  12455.  
  12456.  tst.b NoiseMade0pRIGHT
  12457.  bne.s chan1still    ;it'll never work
  12458.  tst.w playnull1
  12459.  beq.s nnul1
  12460.  sub.w #1,playnull1
  12461.  bra.s chan1still
  12462. nnul1:
  12463.  move.w #0,RIGHTCHANDATA+2
  12464.  clr.w RIGHTCHANDATA+32
  12465. chan1still:
  12466.  
  12467.  tst.b NoiseMade1pRIGHT
  12468.  bne.s chan2still
  12469.  tst.w playnull2
  12470.  beq.s nnul2
  12471.  sub.w #1,playnull2
  12472.  bra.s chan2still
  12473. nnul2:
  12474.  move.w #0,RIGHTCHANDATA+2+4
  12475.  clr.w RIGHTCHANDATA+32+4
  12476. chan2still:
  12477.  
  12478.  tst.b NoiseMade1pLEFT
  12479.  bne.s chan3still
  12480.  tst.w playnull3
  12481.  beq.s nnul3
  12482.  sub.w #1,playnull3
  12483.  bra.s chan3still
  12484. nnul3:
  12485.  move.w #0,LEFTCHANDATA+2+4
  12486.  clr.w LEFTCHANDATA+32+4
  12487.  
  12488. chan3still:
  12489.  
  12490.  
  12491.  movem.l (a7)+,d0-d7/a0-a6
  12492.  
  12493.  moveq #0,d0
  12494.  rts
  12495.  
  12496. backbeat: dc.w 0
  12497.  
  12498. playnull0: dc.w 0
  12499. playnull1: dc.w 0
  12500. playnull2: dc.w 0
  12501. playnull3: dc.w 0
  12502.  
  12503. Samp0endRIGHT: dc.l emptyend
  12504. Samp1endRIGHT: dc.l emptyend
  12505. Samp2endRIGHT: dc.l emptyend
  12506. Samp3endRIGHT: dc.l emptyend
  12507. Samp0endLEFT: dc.l emptyend
  12508. Samp1endLEFT: dc.l emptyend
  12509. Samp2endLEFT: dc.l emptyend
  12510. Samp3endLEFT: dc.l emptyend
  12511.  
  12512. Aupt0: dc.l null
  12513. Auback0: dc.l null+500
  12514. Aupt2: dc.l null3
  12515. Auback2: dc.l null3+500
  12516. Aupt3: dc.l null4
  12517. Auback3: dc.l null4+500
  12518. Aupt1: dc.l null2
  12519. Auback1: dc.l null2+500
  12520.  
  12521. NoiseMade0LEFT: dc.b 0
  12522. NoiseMade1LEFT: dc.b 0
  12523. NoiseMade2LEFT: dc.b 0
  12524. NoiseMade3LEFT: dc.b 0
  12525. NoiseMade0pLEFT: dc.b 0
  12526. NoiseMade1pLEFT: dc.b 0
  12527. NoiseMade2pLEFT: dc.b 0
  12528. NoiseMade3pLEFT: dc.b 0
  12529. NoiseMade0RIGHT: dc.b 0
  12530. NoiseMade1RIGHT: dc.b 0
  12531. NoiseMade2RIGHT: dc.b 0
  12532. NoiseMade3RIGHT: dc.b 0
  12533. NoiseMade0pRIGHT: dc.b 0
  12534. NoiseMade1pRIGHT: dc.b 0
  12535. NoiseMade2pRIGHT: dc.b 0
  12536. NoiseMade3pRIGHT: dc.b 0
  12537.  
  12538. empty: ds.l 100
  12539. emptyend:
  12540.  
  12541. **************************************
  12542. * I want a routine to calculate all the
  12543. * info needed for the sound player to
  12544. * work, given say position of noise, volume
  12545. * and sample number.
  12546.  
  12547. Samplenum: dc.w 0
  12548. Noisex: dc.w 0
  12549. Noisez: dc.w 0
  12550. Noisevol: dc.w 0
  12551. chanpick: dc.w 0
  12552. IDNUM: dc.w 0
  12553. needleft: dc.b 0
  12554. needright: dc.b 0
  12555. STEREO: dc.b $0
  12556. even
  12557. prot6: dc.w 0
  12558.  
  12559.  even
  12560. CHANNELDATA:
  12561. LEFTCHANDATA:
  12562.  dc.l $00000000
  12563.  dc.l $00000000
  12564.  dc.l $FF000000
  12565.  dc.l $FF000000
  12566. RIGHTCHANDATA:
  12567.  dc.l $00000000
  12568.  dc.l $00000000
  12569.  dc.l $FF000000
  12570.  dc.l $FF000000
  12571.  
  12572.  ds.l 8
  12573.  
  12574. RIGHTPLAYEDTAB: ds.l 20
  12575. LEFTPLAYEDTAB: ds.l 20
  12576.  
  12577. SourceEcho: dc.w 0
  12578. PLREcho: dc.w 0
  12579.  
  12580.  
  12581. LEFTOFFSET: dc.l 0
  12582. RIGHTOFFSET: dc.l 0
  12583.  
  12584. MakeSomeNoise:
  12585.  
  12586. ; move.w #$10,$dff000+intena
  12587.  
  12588. ; Plan for new sound handler:
  12589. ; It is sent a sample number,
  12590. ; a position relative to the
  12591. ; player, an id number and a volume.
  12592. ; Also notifplaying.
  12593.     
  12594. ; indirect inputs are the available
  12595. ; channel flags and whether or not
  12596. ; stereo sound is selected.
  12597.  
  12598. ; the algorithm must decide
  12599. ; whether the new sound is more
  12600. ; important than the ones already
  12601. ; playing. Thus an 'importance'
  12602. ; must be calculated, probably
  12603. ; using volume.
  12604.  
  12605. ; The output needs to be:
  12606.  
  12607. ; Write the pointers and volumes of
  12608. ; the sound channels
  12609.  
  12610.  tst.b notifplaying
  12611.  beq.s dontworry
  12612.  
  12613. ; find if we are already playing
  12614.  
  12615.  move.w IDNUM,d0
  12616.  cmp.w #$ffff,d0
  12617.  beq.s dontworry
  12618.  move.w #7,d1
  12619.  lea CHANNELDATA,a3
  12620. findsameasme
  12621.  tst.b (a3)
  12622.  bne.s notavail
  12623.  cmp.w 32(a3),d0
  12624.  beq SameAsMe
  12625. notavail:
  12626.  add.w #4,a3
  12627.  dbra d1,findsameasme
  12628.  bra dontworry
  12629. SameAsMe
  12630. ; move.w #$8010,$dff000+intena
  12631.  rts
  12632.  
  12633. noiseloud: dc.w 0
  12634.  
  12635. dontworry:
  12636.  
  12637. ; Ok its fine for us to play a sound.
  12638. ; So calculate left/right volume.
  12639.  
  12640.  move.w Noisex,d1
  12641.  muls d1,d1
  12642.  move.w Noisez,d2
  12643.  muls d2,d2
  12644.  move.w Noisevol,d3
  12645.  move.w #32767,noiseloud
  12646.  moveq #1,d0
  12647.  add.l d1,d2
  12648.  beq pastcalc
  12649.  
  12650.  move.w #31,d0
  12651. .findhigh
  12652.  btst d0,d2
  12653.  bne .foundhigh
  12654.  dbra d0,.findhigh
  12655. .foundhigh
  12656.  asr.w #1,d0
  12657.  clr.l d3
  12658.  bset d0,d3
  12659.  move.l d3,d0
  12660.  
  12661.  move.w d0,d3
  12662.  muls d3,d3    ; x*x
  12663.  sub.l d2,d3    ; x*x-a
  12664.  asr.l #1,d3    ; (x*x-a)/2
  12665.  divs d0,d3    ; (x*x-a)/2x
  12666.  sub.w d3,d0    ; second approx
  12667.  bgt .stillnot0
  12668.  move.w #1,d0
  12669. .stillnot0
  12670.  
  12671.  move.w d0,d3
  12672.  muls d3,d3
  12673.  sub.l d2,d3
  12674.  asr.l #1,d3
  12675.  divs d0,d3
  12676.  sub.w d3,d0    ; second approx
  12677.  bgt .stillnot02
  12678.  move.w #1,d0
  12679. .stillnot02
  12680.  
  12681.  move.w Noisevol,d3
  12682.  ext.l d3
  12683.  asl.l #6,d3
  12684.  cmp.l #32767,d3
  12685.  ble.s .nnnn
  12686.  move.l #32767,d3
  12687. .nnnn
  12688.  
  12689.  asr.w #2,d0
  12690.  addq #1,d0
  12691.  divs d0,d3
  12692.  
  12693. pastcalc:
  12694.  move.w d3,noiseloud
  12695.  
  12696.  cmp.w #64,d3
  12697.  ble.s notooloud
  12698.  move.w #64,d3
  12699. notooloud:
  12700.  
  12701.     ; d3 contains volume of noise.
  12702.     
  12703.  move.w d3,d4
  12704.  tst.b STEREO
  12705.  beq NOSTEREO
  12706.  
  12707.  move.w d3,d2
  12708.  muls Noisex,d2
  12709.  asl.w #2,d0
  12710.  divs d0,d2
  12711.  
  12712.  bgt.s quietleft
  12713.  add.w d2,d4
  12714.  bge.s donequiet
  12715.  move.w #0,d4
  12716.  bra.s donequiet
  12717. quietleft:
  12718.  sub.w d2,d3
  12719.  bge.s donequiet
  12720.  move.w #0,d3
  12721. donequiet:
  12722.  
  12723. ; d3=leftvol?
  12724. ; d4=rightvol?
  12725.  
  12726.  
  12727.     ; d3 contains volume of noise.
  12728.     
  12729.  move.w #$ffff,needleft
  12730.  
  12731.  move.l #0,RIGHTOFFSET
  12732.  move.l #0,LEFTOFFSET
  12733.  
  12734.  cmp.b d3,d4
  12735.  bgt.s RightLouder
  12736.  beq.s NoLouder
  12737.  
  12738.  move.l #4,LEFTOFFSET
  12739.  
  12740. ; Left is louder; is it MUCH louder?
  12741.  
  12742.  st needleft
  12743.  move.w d3,d2
  12744.  sub.w d4,d2
  12745.  cmp.w #32,d2
  12746.  slt needright
  12747.  bra aboutsame
  12748.  
  12749. RightLouder:
  12750.  move.l #4,RIGHTOFFSET
  12751.  st needright
  12752.  move.w d4,d2
  12753.  sub.w d3,d2
  12754.  cmp.w #32,d2
  12755.  slt needleft
  12756.  
  12757. aboutsame:
  12758. NoLouder:
  12759.  
  12760.  
  12761. ; Find least important sound on left
  12762.  
  12763.  move.l #0,a2
  12764.  move.l #0,d5
  12765.  move.w #32767,d2
  12766.  move.w IDNUM,d0
  12767.  lea LEFTCHANDATA,a3
  12768.  move.w #3,d1
  12769. FindLeftChannel
  12770.  tst.b (a3)
  12771.  bne.s .notactive
  12772.  cmp.w 32(a3),d0
  12773.  beq.s FOUNDLEFT
  12774.  cmp.w 2(a3),d2
  12775.  blt.s .notactive
  12776.  move.w 2(a3),d2
  12777.  move.l a3,a2
  12778.  move.w d5,d6
  12779.  
  12780. .notactive:
  12781.  add.w #4,a3
  12782.  add.w #1,d5
  12783.  dbra d1,FindLeftChannel
  12784.  move.l a2,a3
  12785.  bra.s gopastleft
  12786. FOUNDLEFT:
  12787.  move.w d5,d6
  12788. gopastleft:
  12789.  move.l a3,d5
  12790.  tst.l d5
  12791.  bne.s FOUNDALEFT
  12792. NONOISE:
  12793. ; move.w #$8010,$dff000+intena
  12794.  rts
  12795. FOUNDALEFT:
  12796.  
  12797.  cmp.w noiseloud,d2
  12798.  bge dorightchan
  12799.  
  12800. ; d6 = channel number
  12801.  cmp.w #$ffff,d0
  12802.  bne.s .noche
  12803.  move.w #$fffe,d0
  12804. .noche:
  12805.  move.w d0,32(a3)
  12806.  move.w noiseloud,2(a3)
  12807.  
  12808.  move.w Samplenum,d5
  12809.  
  12810. ; tst.b Echo
  12811. ; bne.s YESECHO
  12812. ; tst.b SourceEcho
  12813. ; beq.s NOECHO
  12814. ;
  12815. ;YESECHO:
  12816. ;
  12817. ; move.l LINKFILE,a3
  12818. ; add.l #EchoTable,a3
  12819. ; move.b (a3,d5.w),d5
  12820. ;
  12821. ;NOECHO:
  12822.  
  12823.  move.l #SampleList,a3
  12824.  move.l (a3,d5.w*8),a1
  12825.  add.l LEFTOFFSET,a1
  12826.  move.l 4(a3,d5.w*8),a2
  12827.  add.l LEFTOFFSET,a2
  12828.  
  12829.  tst.b d6
  12830.  seq NoiseMade0LEFT
  12831.  beq.s .chan0
  12832.  cmp.b #2,d6
  12833.  slt NoiseMade1LEFT
  12834.  blt .chan1
  12835.  seq NoiseMade2LEFT
  12836.  beq .chan2
  12837.  st NoiseMade3LEFT
  12838.  
  12839.  move.b d5,LEFTPLAYEDTAB+9
  12840.  move.b d3,LEFTPLAYEDTAB+1+9
  12841.  move.b d4,LEFTPLAYEDTAB+2+9
  12842.  move.b d3,vol3left
  12843.  move.l a1,pos3LEFT
  12844.  move.l a2,Samp3endLEFT
  12845.  bra dorightchan
  12846.  
  12847. .chan0: 
  12848.  move.b d5,LEFTPLAYEDTAB
  12849.  move.b d3,LEFTPLAYEDTAB+1
  12850.  move.b d4,LEFTPLAYEDTAB+2
  12851.  move.l a1,pos0LEFT
  12852.  move.l a2,Samp0endLEFT
  12853.  move.b d3,vol0left
  12854.  bra dorightchan
  12855.  
  12856. .chan1:
  12857.  move.b d5,LEFTPLAYEDTAB+3
  12858.  move.b d3,LEFTPLAYEDTAB+1+3
  12859.  move.b d4,LEFTPLAYEDTAB+2+3
  12860.  move.b d3,vol1left
  12861.  move.l a1,pos1LEFT
  12862.  move.l a2,Samp1endLEFT
  12863.  bra dorightchan
  12864.  
  12865. .chan2: 
  12866.  move.b d5,LEFTPLAYEDTAB+6
  12867.  move.b d3,LEFTPLAYEDTAB+1+6
  12868.  move.b d4,LEFTPLAYEDTAB+2+6
  12869.  move.l a1,pos2LEFT
  12870.  move.l a2,Samp2endLEFT
  12871.  move.b d3,vol2left
  12872.  
  12873. dorightchan:
  12874.  
  12875. ; Find least important sound on right
  12876.  
  12877.  move.l #0,a2
  12878.  move.l #0,d5
  12879.  move.w #10000,d2
  12880.  move.w IDNUM,d0
  12881.  lea RIGHTCHANDATA,a3
  12882.  move.w #3,d1
  12883. FindRightChannel
  12884.  tst.b (a3)
  12885.  bne.s .notactive
  12886.  cmp.w 32(a3),d0
  12887.  beq.s FOUNDRIGHT
  12888.  cmp.w 2(a3),d2
  12889.  blt.s .notactive
  12890.  move.w 2(a3),d2
  12891.  move.l a3,a2
  12892.  move.w d5,d6
  12893.  
  12894. .notactive:
  12895.  add.w #4,a3
  12896.  add.w #1,d5
  12897.  dbra d1,FindRightChannel
  12898.  move.l a2,a3
  12899.  bra.s gopastright
  12900. FOUNDRIGHT:
  12901.  move.w d5,d6
  12902. gopastright:
  12903.  move.l a3,d5
  12904.  tst.l d5
  12905.  bne.s FOUNDARIGHT
  12906. tototot:
  12907. ; move.w #$8010,$dff000+intena
  12908.  rts
  12909. FOUNDARIGHT:
  12910.  
  12911.  cmp.w noiseloud,d2
  12912.  bgt.s tototot
  12913.  
  12914. ; d6 = channel number
  12915.  cmp.w #$ffff,d0
  12916.  bne.s .noche
  12917.  move.w #$fffe,d0
  12918. .noche:
  12919.  move.w d0,32(a3)
  12920.  move.w noiseloud,2(a3)
  12921.  
  12922.  move.w Samplenum,d5
  12923.  move.l #SampleList,a3
  12924.  move.l (a3,d5.w*8),a1
  12925.  move.l 4(a3,d5.w*8),a2
  12926.  add.l RIGHTOFFSET,a1
  12927.  add.l RIGHTOFFSET,a2
  12928.  
  12929.  tst.b d6
  12930.  seq NoiseMade0RIGHT
  12931.  beq.s .chan0
  12932.  cmp.b #2,d6
  12933.  slt NoiseMade1RIGHT
  12934.  blt .chan1
  12935.  seq NoiseMade2RIGHT
  12936.  beq .chan2
  12937.  st NoiseMade3RIGHT
  12938.  
  12939.  move.b d5,RIGHTPLAYEDTAB+9
  12940.  move.b d3,RIGHTPLAYEDTAB+1+9
  12941.  move.b d4,RIGHTPLAYEDTAB+2+9
  12942.  move.b d4,vol3right
  12943.  move.l a1,pos3RIGHT
  12944.  move.l a2,Samp3endRIGHT
  12945. ; move.w #$8010,$dff000+intena
  12946.  rts
  12947.  
  12948. .chan0: 
  12949.  move.b d5,RIGHTPLAYEDTAB
  12950.  move.b d3,RIGHTPLAYEDTAB+1
  12951.  move.b d4,RIGHTPLAYEDTAB+2
  12952.  move.l a1,pos0RIGHT
  12953.  move.l a2,Samp0endRIGHT
  12954.  move.b d4,vol0right
  12955. ; move.w #$8010,$dff000+intena
  12956.  rts
  12957.  
  12958. .chan1:
  12959.  move.b d5,RIGHTPLAYEDTAB+3
  12960.  move.b d3,RIGHTPLAYEDTAB+1+3
  12961.  move.b d4,RIGHTPLAYEDTAB+2+3
  12962.  move.b d3,vol1right
  12963.  move.l a1,pos1RIGHT
  12964.  move.l a2,Samp1endRIGHT
  12965. ; move.w #$8010,$dff000+intena
  12966.  rts
  12967.  
  12968. .chan2: 
  12969.  move.b d5,RIGHTPLAYEDTAB+6
  12970.  move.b d3,RIGHTPLAYEDTAB+1+6
  12971.  move.b d4,RIGHTPLAYEDTAB+2+6
  12972.  move.l a1,pos2RIGHT
  12973.  move.l a2,Samp2endRIGHT
  12974.  move.b d3,vol2right
  12975. ; move.w #$8010,$dff000+intena
  12976.  rts
  12977.  
  12978. NOSTEREO:
  12979.  move.l #0,a2
  12980.  move.l #-1,d5
  12981.  move.w #32767,d2
  12982.  move.w IDNUM,d0
  12983.  lea CHANNELDATA,a3
  12984.  move.w #7,d1
  12985.  moveq #-1,d6
  12986.  
  12987. FindChannel
  12988.  tst.b (a3)
  12989.  bne.s .notactive
  12990.  cmp.w 32(a3),d0
  12991.  beq.s FOUNDMYCHAN
  12992.  cmp.w 2(a3),d2
  12993.  blt.s .notactive
  12994.  move.w 2(a3),d2
  12995.  move.l a3,a2
  12996.  move.w d5,d6
  12997.  add.w #1,d6
  12998.  
  12999. .notactive:
  13000.  add.w #4,a3
  13001.  add.w #1,d5
  13002.  dbra d1,FindChannel
  13003.  
  13004.  move.l a2,a3
  13005.  bra.s gopastchan
  13006.  
  13007. FOUNDMYCHAN:
  13008.  move.w 2(a3),d2
  13009.  
  13010. FOUNDCHAN:
  13011.  move.w d5,d6
  13012.  add.w #1,d6
  13013. gopastchan:
  13014.  tst.w d6
  13015.  bge.s FOUNDACHAN
  13016. tooquiet:
  13017. ; move.w #$8010,$dff000+intena
  13018.  rts
  13019. FOUNDACHAN:
  13020.  
  13021. ; d6 = channel number
  13022.  
  13023.  cmp.w noiseloud,d2
  13024.  bgt.s tooquiet
  13025.  
  13026.  cmp.w #$ffff,d0
  13027.  bne.s .noche
  13028.  move.w #$fffe,d0
  13029. .noche:
  13030.  move.w d0,32(a3)
  13031.  move.w noiseloud,2(a3)
  13032.  
  13033.  move.w Samplenum,d5
  13034.  
  13035. ; tst.b Echo
  13036. ; bne.s YESECHO2
  13037. ; tst.b SourceEcho
  13038. ; beq.s NOECHO2
  13039. ;
  13040. ;YESECHO2:
  13041. ;
  13042. ; move.l LINKFILE,a3
  13043. ; add.l #EchoTable,a3
  13044. ; move.b (a3,d5.w),d5
  13045. ;
  13046. ;NOECHO2:
  13047.  
  13048.  move.l #SampleList,a3
  13049.  move.l (a3,d5.w*8),a1
  13050.  move.l 4(a3,d5.w*8),a2
  13051.  
  13052.  tst.b d6
  13053.  beq .chan0
  13054.  cmp.b #2,d6
  13055.  blt .chan1
  13056.  beq .chan2
  13057.  cmp.b #4,d6
  13058.  blt .chan3
  13059.  beq .chan4
  13060.  cmp.b #6,d6
  13061.  blt .chan5
  13062.  beq .chan6
  13063.  st NoiseMade3RIGHT
  13064.  
  13065.  move.b d5,RIGHTPLAYEDTAB+9
  13066.  move.b d3,RIGHTPLAYEDTAB+1+9
  13067.  move.b d4,RIGHTPLAYEDTAB+2+9
  13068.  move.b d4,vol3right
  13069.  move.l a1,pos3RIGHT
  13070.  move.l a2,Samp3endRIGHT
  13071. ; move.w #$8010,$dff000+intena
  13072.  rts
  13073.  
  13074. .chan3:
  13075.  st NoiseMade3LEFT
  13076.  move.b d5,LEFTPLAYEDTAB+9
  13077.  move.b d3,LEFTPLAYEDTAB+1+9
  13078.  move.b d4,LEFTPLAYEDTAB+2+9
  13079.  move.b d3,vol3left
  13080.  move.l a1,pos3LEFT
  13081.  move.l a2,Samp3endLEFT
  13082. ; move.w #$8010,$dff000+intena
  13083.  rts
  13084.  
  13085. .chan0: 
  13086.  st NoiseMade0LEFT
  13087.  move.b d5,LEFTPLAYEDTAB
  13088.  move.b d3,LEFTPLAYEDTAB+1
  13089.  move.b d4,LEFTPLAYEDTAB+2
  13090.  move.l a1,pos0LEFT
  13091.  move.l a2,Samp0endLEFT
  13092.  move.b d3,vol0left
  13093. ; move.w #$8010,$dff000+intena
  13094.  rts
  13095.  
  13096. .chan1:
  13097.  st NoiseMade1LEFT
  13098.  move.b d5,LEFTPLAYEDTAB+3
  13099.  move.b d3,LEFTPLAYEDTAB+1+3
  13100.  move.b d4,LEFTPLAYEDTAB+2+3
  13101.  move.b d3,vol1left
  13102.  move.l a1,pos1LEFT
  13103.  move.l a2,Samp1endLEFT
  13104. ; move.w #$8010,$dff000+intena
  13105.  rts
  13106.  
  13107. .chan2: 
  13108.  st NoiseMade2LEFT
  13109.  move.b d5,LEFTPLAYEDTAB+6
  13110.  move.b d3,LEFTPLAYEDTAB+1+6
  13111.  move.b d4,LEFTPLAYEDTAB+2+6
  13112.  move.l a1,pos2LEFT
  13113.  move.l a2,Samp2endLEFT
  13114.  move.b d3,vol2left
  13115. ; move.w #$8010,$dff000+intena
  13116.  rts
  13117.  
  13118. .chan4: 
  13119.  st NoiseMade0RIGHT
  13120.  move.b d5,RIGHTPLAYEDTAB
  13121.  move.b d3,RIGHTPLAYEDTAB+1
  13122.  move.b d4,RIGHTPLAYEDTAB+2
  13123.  move.l a1,pos0RIGHT
  13124.  move.l a2,Samp0endRIGHT
  13125.  move.b d4,vol0right
  13126. ; move.w #$8010,$dff000+intena
  13127.  rts
  13128.  
  13129. .chan5:
  13130.  st NoiseMade1RIGHT
  13131.  move.b d5,RIGHTPLAYEDTAB+3
  13132.  move.b d3,RIGHTPLAYEDTAB+1+3
  13133.  move.b d4,RIGHTPLAYEDTAB+2+3
  13134.  move.b d3,vol1right
  13135.  move.l a1,pos1RIGHT
  13136.  move.l a2,Samp1endRIGHT
  13137. ; move.w #$8010,$dff000+intena
  13138.  rts
  13139.  
  13140. .chan6: 
  13141.  st NoiseMade2RIGHT
  13142.  move.b d5,RIGHTPLAYEDTAB+6
  13143.  move.b d3,RIGHTPLAYEDTAB+1+6
  13144.  move.b d4,RIGHTPLAYEDTAB+2+6
  13145.  move.l a1,pos2RIGHT
  13146.  move.l a2,Samp2endRIGHT
  13147.  move.b d3,vol2right
  13148. ; move.w #$8010,$dff000+intena
  13149.  rts
  13150.  
  13151. SampleList:
  13152.  dc.l Scream,EndScream
  13153.  dc.l Shoot,EndShoot
  13154.  dc.l Munch,EndMunch
  13155.  dc.l PooGun,EndPooGun
  13156.  dc.l Collect,EndCollect
  13157. ;5
  13158.  dc.l DoorNoise,EndDoorNoise
  13159.  dc.l 0,0
  13160.  dc.l Stomp,EndStomp
  13161.  dc.l LowScream,EndLowScream
  13162.  dc.l BaddieGun,EndBaddieGun
  13163. ;10
  13164.  dc.l SwitchNoise,EndSwitch
  13165.  dc.l Reload,EndReload
  13166.  dc.l NoAmmo,EndNoAmmo
  13167.  dc.l Splotch,EndSplotch
  13168.  dc.l SplatPop,EndSplatPop
  13169. ;15
  13170.  dc.l Boom,EndBoom
  13171.  dc.l Hiss,EndHiss
  13172.  dc.l Howl1,EndHowl1
  13173.  dc.l Howl2,EndHowl2
  13174.  dc.l Pant,EndPant
  13175. ;20
  13176.  dc.l Whoosh,EndWhoosh
  13177.  dc.l ROAR,EndROAR
  13178.  dc.l whoosh,Endwhoosh
  13179.  dc.l 0,0
  13180.  dc.l 0,0
  13181.  dc.l 0,0
  13182.  dc.l 0,0
  13183.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  13184.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  13185.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  13186.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  13187.  
  13188.  dc.l 0
  13189.  
  13190. storeval: dc.w 0
  13191.  
  13192.  include "ab3:source_4000/wallchunk.s"
  13193.  include "ab3:source_4000/newloadfromdisk.s"
  13194.  include "ab3:source_4000/screensetup.s"
  13195.  include "ab3:source_4000/CONTROLLOOP.s"
  13196.  
  13197.  
  13198.  
  13199.  
  13200. saveinters:  
  13201.  dc.w 0
  13202.  
  13203. z: dc.w 10
  13204.  
  13205. notifplaying:
  13206.  dc.w 0
  13207.  
  13208. audpos1: dc.w 0
  13209. audpos1b: dc.w 0
  13210. audpos2: dc.w 0
  13211. audpos2b: dc.w 0
  13212. audpos3: dc.w 0
  13213. audpos3b: dc.w 0
  13214. audpos4: dc.w 0
  13215. audpos4b: dc.w 0
  13216.  
  13217. vol0left: dc.w 0
  13218. vol0right: dc.w 0
  13219. vol1left: dc.w 0
  13220. vol1right: dc.w 0
  13221. vol2left: dc.w 0
  13222. vol2right: dc.w 0
  13223. vol3left: dc.w 0
  13224. vol3right: dc.w 0
  13225.  
  13226. pos: dc.l 0
  13227.  
  13228. pos0LEFT: dc.l empty
  13229. pos1LEFT: dc.l empty
  13230. pos2LEFT: dc.l empty
  13231. pos3LEFT: dc.l empty
  13232. pos0RIGHT: dc.l empty
  13233. pos1RIGHT: dc.l empty
  13234. pos2RIGHT: dc.l empty
  13235. pos3RIGHT: dc.l empty
  13236.  
  13237. numtodo dc.w 0
  13238.  
  13239. npt: dc.w 0
  13240.  
  13241. pretab:
  13242. val SET 0
  13243.  REPT 128
  13244.  dc.b val
  13245. val SET val+1
  13246.  ENDR
  13247. val SET -128
  13248.  REPT 128
  13249.  dc.b val
  13250. val SET val+1
  13251.  ENDR 
  13252.  
  13253. tab:
  13254.  ifeq CHEESEY
  13255.  ds.b 256*65
  13256.  endc
  13257.  
  13258. test: dc.l 0
  13259.  ds.l 30
  13260.  
  13261.  
  13262.  even
  13263. ConstCols:
  13264. ; incbin "ConstCols"
  13265.  even
  13266. Smoothscalecols:
  13267. ; incbin "smoothbumppalscaled"
  13268.  even
  13269. SmoothTile:
  13270. ; incbin "smoothbumptile"
  13271.  even
  13272. Bumpscalecols:
  13273. ; incbin "Bumppalscaled"
  13274.  even
  13275. Bumptile:
  13276. ; incbin "bumptile"
  13277.  even
  13278. scalecols: ;incbin "bytepixpalscaled"
  13279.  even
  13280. ;floorscalecols:
  13281. ; incbin "floor256pal"
  13282. ; ds.w 256*4
  13283.  
  13284.  even
  13285. PaletteAddr: dc.l 0
  13286. ChunkAddr: dc.l 0
  13287. ;walltiles:
  13288. ; dc.l GreenMechanicWALL
  13289. ; dc.l BlueGreyMetalWALL
  13290. ; dc.l TechnoDetailWALL
  13291. ; dc.l BlueStoneWALL
  13292. ; dc.l RedAlertWALL
  13293. ; dc.l RockWALL
  13294. ;
  13295. ;GreenMechanicWALL: incbin "ab3:includes/walls/greenmechanic.wad"
  13296. ;BlueGreyMetalWALL: incbin "ab3:includes/walls/BlueGreyMetal.wad"
  13297. ;TechnoDetailWALL: incbin "ab3:includes/walls/TechnoDetail.wad"
  13298. ;BlueStoneWALL: incbin "ab3:includes/walls/bluestone.wad"
  13299. ;RedAlertWALL: incbin "ab3:includes/walls/redalert.wad"
  13300. ;RockWALL: incbin "ab3:includes/walls/rock.wad"
  13301.  
  13302. floortile:
  13303.  dc.l 0
  13304. ; incbin "floortile" 
  13305.  even
  13306. wallrouts:
  13307. ; incbin "2x2WallDraw" 
  13308.  CNOP 0,64
  13309.  
  13310.  ifeq CHEESEY 
  13311. BackPicture:
  13312.  dc.l 0
  13313. ; incbin "rawback"
  13314. EndBackPicture:
  13315.  endc
  13316.  
  13317. drawpt: dc.l 0
  13318. olddrawpt: dc.l 0
  13319. frompt: dc.l 0 
  13320.  
  13321. SineTable:
  13322.  incbin "bigsine"
  13323.  
  13324. angspd: dc.w 0
  13325. flooryoff: dc.w 0
  13326. xoff: dc.l 0
  13327. yoff: dc.l 0
  13328. yvel: dc.l 0
  13329. zoff: dc.l 0
  13330. tyoff: dc.l 0
  13331. xspdval: dc.l 0
  13332. zspdval: dc.l 0
  13333. Zone: dc.w 0
  13334.  
  13335. PLR1: dc.b $ff
  13336.  even
  13337. PLR1_energy: dc.w 191
  13338. PLR1_GunSelected: dc.w 0
  13339. PLR1_cosval: dc.w 0
  13340. PLR1_sinval: dc.w 0
  13341. PLR1_angpos: dc.w 0
  13342. PLR1_angspd: dc.w 0
  13343. PLR1_xoff: dc.l 0
  13344. PLR1_yoff: dc.l 0
  13345. PLR1_yvel: dc.l 0
  13346. PLR1_zoff: dc.l 0
  13347. PLR1_tyoff: dc.l 0
  13348. PLR1_xspdval: dc.l 0
  13349. PLR1_zspdval: dc.l 0
  13350. PLR1_Zone: dc.w 0
  13351. PLR1_Roompt: dc.l 0
  13352. PLR1_FloorSpd: dc.l 0
  13353. PLR2_FloorSpd: dc.l 0
  13354. PLR1_OldRoompt: dc.l 0
  13355. PLR1_PointsToRotatePtr: dc.l 0
  13356. PLR1_ListOfGraphRooms: dc.l 0
  13357. PLR1_oldxoff: dc.l 0
  13358. PLR1_oldzoff: dc.l 0
  13359. PLR1_StoodInTop: dc.b 0
  13360.  even
  13361. PLR1_height: dc.l 0
  13362. PLR1_RoomBright: dc.w 0
  13363.  
  13364. DOUBLEWIDTH: dc.b $0,0
  13365. DOUBLEHEIGHT: dc.b 0,0
  13366. PLR1_TELEPORTED: dc.w 0
  13367. PLR2_TELEPORTED: dc.w 0
  13368.  
  13369.  ds.w 4
  13370.  
  13371. OLDX1: dc.l 0
  13372. OLDX2: dc.l 0
  13373. OLDZ1: dc.l 0
  13374. OLDZ2: dc.l 0
  13375.  
  13376. XDIFF1: dc.l 0
  13377. ZDIFF1: dc.l 0
  13378. XDIFF2: dc.l 0
  13379. ZDIFF2: dc.l 0
  13380.  
  13381. PLR1s_cosval: dc.w 0
  13382. PLR1s_sinval: dc.w 0
  13383. PLR1s_angpos: dc.w 0
  13384. PLR1s_angspd: dc.w 0
  13385. PLR1s_xoff: dc.l 0
  13386. PLR1s_yoff: dc.l 0
  13387. PLR1s_yvel: dc.l 0
  13388. PLR1s_zoff: dc.l 0
  13389. PLR1s_tyoff: dc.l 0
  13390. PLR1s_xspdval: dc.l 0
  13391. PLR1s_zspdval: dc.l 0
  13392. PLR1s_Zone: dc.w 0
  13393. PLR1s_Roompt: dc.l 0
  13394. PLR1s_OldRoompt: dc.l 0
  13395. PLR1s_PointsToRotatePtr: dc.l 0
  13396. PLR1s_ListOfGraphRooms: dc.l 0
  13397. PLR1s_oldxoff: dc.l 0
  13398. PLR1s_oldzoff: dc.l 0
  13399. PLR1s_height: dc.l 0
  13400. PLR1s_targheight: dc.l 0
  13401.  
  13402. PLR1_Echo: dc.w 0
  13403.  
  13404. p1_xoff: dc.l 0
  13405. p1_zoff: dc.l 0
  13406. p1_yoff: dc.l 0
  13407. p1_height: dc.l 0
  13408. p1_angpos: dc.w 0
  13409. p1_bobble: dc.w 0
  13410. p1_clicked: dc.b 0
  13411. p1_spctap: dc.b 0
  13412. p1_ducked: dc.b 0
  13413. p1_gunselected: dc.b 0
  13414. p1_fire: dc.b 0
  13415.  even
  13416. p1_holddown: dc.w 0
  13417.  
  13418.  ds.w 4
  13419.  
  13420. PLR2: dc.b $ff
  13421.  even
  13422. PLR2_GunSelected: dc.w 0
  13423. PLR2_energy: dc.w 191
  13424. PLR2_cosval: dc.w 0
  13425. PLR2_sinval: dc.w 0
  13426. PLR2_angpos: dc.w 0
  13427. PLR2_angspd: dc.w 0
  13428. PLR2_xoff: dc.l 0
  13429. PLR2_yoff: dc.l 0
  13430. PLR2_yvel: dc.l 0
  13431. PLR2_zoff: dc.l 0
  13432. PLR2_tyoff: dc.l 0
  13433. PLR2_xspdval: dc.l 0
  13434. PLR2_zspdval: dc.l 0
  13435. PLR2_Zone: dc.w 0
  13436. PLR2_Roompt: dc.l 0
  13437. PLR2_OldRoompt: dc.l 0
  13438. PLR2_PointsToRotatePtr: dc.l 0
  13439. PLR2_ListOfGraphRooms: dc.l 0
  13440. PLR2_oldxoff: dc.l 0
  13441. PLR2_oldzoff: dc.l 0
  13442. PLR2_StoodInTop: dc.b 0
  13443.  even
  13444. PLR2_height: dc.l 0
  13445. PLR2_Echo: dc.w 0
  13446. Echo: dc.w 0
  13447.  
  13448.  ds.w 4
  13449.  
  13450. PLR2s_cosval: dc.w 0
  13451. PLR2s_sinval: dc.w 0
  13452. PLR2s_angpos: dc.w 0
  13453. PLR2s_angspd: dc.w 0
  13454. PLR2s_xoff: dc.l 0
  13455. PLR2s_yoff: dc.l 0
  13456. PLR2s_yvel: dc.l 0
  13457. PLR2s_zoff: dc.l 0
  13458. PLR2s_tyoff: dc.l 0
  13459. PLR2s_xspdval: dc.l 0
  13460. PLR2s_zspdval: dc.l 0
  13461. PLR2s_Zone: dc.w 0
  13462. PLR2s_Roompt: dc.l 0
  13463. PLR2s_OldRoompt: dc.l 0
  13464. PLR2s_PointsToRotatePtr: dc.l 0
  13465. PLR2s_ListOfGraphRooms: dc.l 0
  13466. PLR2s_oldxoff: dc.l 0
  13467. PLR2s_oldzoff: dc.l 0
  13468. PLR2s_height: dc.l 0
  13469. PLR2s_targheight: dc.l 0
  13470.  
  13471.  ds.w 4
  13472.  
  13473. p2_xoff: dc.l 0
  13474. p2_zoff: dc.l 0
  13475. p2_yoff: dc.l 0
  13476. p2_height: dc.l 0
  13477. p2_angpos: dc.w 0
  13478. p2_bobble: dc.w 0
  13479. p2_clicked: dc.b 0
  13480. p2_spctap: dc.b 0
  13481. p2_ducked: dc.b 0
  13482. p2_gunselected: dc.b 0
  13483. p2_fire: dc.b 0
  13484.  even
  13485. p2_holddown: dc.w 0
  13486.  
  13487. liftanimtab:
  13488.  
  13489. endliftanimtab:
  13490.  
  13491. glassball:
  13492. ; incbin "glassball.inc"
  13493.  
  13494. endglass
  13495. glassballpt: dc.l glassball
  13496.  
  13497. rndtab: ; incbin "randfile"
  13498. endrnd: 
  13499.  
  13500. brightanimtab:
  13501. ; dcb.w 200,20
  13502. ; dc.w 5
  13503. ; dc.w 10,20
  13504. ; dc.w 5
  13505. ; dcb.w 30,20
  13506. ; dc.w 7,10,10,5,10,0,5,6,5,6,5,6,5,6,0
  13507. ; dcb.w 40,0
  13508. ; dc.w 1,2,3,2,3,2,3,2,3,2,3,2,3,0
  13509. ; dcb.w 300,0
  13510. ; dc.w 1,0,1,0,2,2,2,5,5,5,5,5,5,5,5,5,6,10
  13511. ; dc.w -1
  13512.  
  13513. Roompt: dc.l 0
  13514. OldRoompt: dc.l 0
  13515.  
  13516. *****************************************************************
  13517.  *
  13518.  include "AB3:source_4000/LevelData2"
  13519.  *
  13520. *****************************************************************
  13521.  
  13522.  
  13523. wallpt: dc.l 0
  13524. floorpt: dc.l 0
  13525.  
  13526. Rotated:
  13527.  ds.l 2*800 
  13528. ObjRotated:
  13529.  ds.l 2*500
  13530.  
  13531. OnScreen:
  13532.  ds.l 2*800 
  13533.  
  13534. startwait: dc.w 0
  13535. endwait: dc.w 0
  13536.  
  13537. ;Faces:
  13538. ; incbin "faces2raw"
  13539.  
  13540. LINKS: dc.l 0
  13541. FLYLINKS: dc.l 0
  13542. *************************************************************
  13543.  
  13544. consttab:
  13545.  ds.b 65536
  13546.  
  13547. ; incbin "constantfile"
  13548.  
  13549. *******************************************************************
  13550.  
  13551.  
  13552.  
  13553. *********************************
  13554.  
  13555. ; include "ab3:source_4000/loadmod.a"
  13556. ; include "ab3:source_4000/proplayer.a"
  13557.  
  13558.  
  13559. darkentab: 
  13560. ;val SET 0
  13561. ; REPT 256
  13562. ; dc.b val
  13563. ;val SET val+1
  13564. ; ENDR
  13565. ; incbin "darkenfile"
  13566.  
  13567.     dc.w 0
  13568. MIDDLEX: dc.w 0
  13569. RIGHTX: dc.w 192
  13570. FULLSCR: dc.w 0
  13571.  
  13572. ;SHADINGTABLE: incbin "SHADEFILE" 
  13573.  
  13574. ******************************************
  13575. * Link file !*****************************
  13576. ******************************************
  13577.  
  13578. LINKSPACE:
  13579. ; ds.l 22500
  13580. ; incbin "ab3:includes/test.lnk"
  13581.  
  13582. LINKname:
  13583.  dc.b "TKG1:includes/test.lnk",0
  13584.  even
  13585.  
  13586. LINKFILE:
  13587.  dc.l LINKSPACE
  13588.  
  13589. ******************************************
  13590.  
  13591.  
  13592. ;brightentab:
  13593. ; incbin "brightenfile"
  13594. WorkSpace:
  13595.  ds.l 8192 
  13596. waterfile:
  13597.  incbin "waterfile"
  13598.  
  13599.  SECTION ffff,CODE_C
  13600.  
  13601. nullspr: dc.l 0
  13602.  
  13603.  cnop 0,8
  13604. ;borders:
  13605. ; incbin "newleftbord"
  13606. ; incbin "newrightbord"
  13607.  
  13608. health: 
  13609. ;incbin "healthstrip"
  13610. Ammunition: 
  13611. ;incbin "ammostrip"
  13612. healthpal: 
  13613. ;incbin "healthpal"
  13614. PanelKeys: 
  13615. ;incbin "greenkey"
  13616. ; incbin "redkey"
  13617. ; incbin "yellowkey"
  13618. ; incbin "bluekey"
  13619.  
  13620. null: ds.w 500
  13621. null2: ds.w 500
  13622. null3: ds.w 500
  13623. null4: ds.w 500
  13624.  
  13625.  
  13626. Blurbfield:
  13627.  
  13628.  dc.w bpl1ptl
  13629. bl1l: dc.w 0
  13630.  dc.w bpl1pth
  13631. bl1h: dc.w 0
  13632.  
  13633.  dc.w diwstart,$2c81
  13634.  dc.w diwstop,$1cc1
  13635.  dc.w ddfstart,$38
  13636.  dc.w ddfstop,$b8
  13637.  dc.w bplcon0,$9201
  13638.  dc.w bplcon1,0
  13639.  dc.w $106,$c40
  13640. blcols:
  13641.  dc.w col0,0
  13642.  dc.w col1,$fff
  13643.  
  13644.  dc.w $108,0
  13645.  dc.w $10a,0
  13646.  
  13647.  dc.w $ffff,$fffe
  13648.  dc.w $ffff,$fffe
  13649.  
  13650. nullline:
  13651.  ds.b 80    
  13652.  
  13653.  include "ab3:source_4000/titlecop.s"
  13654.  
  13655. bigfield:    
  13656.                 ; Start of our copper list.
  13657.  dc.w dmacon,$8020
  13658.  dc.w intreq,$8011
  13659.  dc.w $1fc,$f
  13660.  dc.w diwstart
  13661. winstart: dc.w $2c81
  13662.  dc.w diwstop
  13663. winstop: dc.w $2cc1
  13664.  dc.w ddfstart
  13665. fetchstart: dc.w $38
  13666.  dc.w ddfstop
  13667. fetchstop: dc.w $b8
  13668.  
  13669. bordercols:
  13670.  incbin "borderpal"
  13671.  
  13672.  dc.w spr0ptl
  13673. s0l:
  13674.  dc.w 0
  13675.  dc.w spr0pth
  13676. s0h:
  13677.  dc.w 0
  13678.  dc.w spr1ptl
  13679. s1l:
  13680.  dc.w 0
  13681.  dc.w spr1pth
  13682. s1h:
  13683.  dc.w 0
  13684.  dc.w spr2ptl
  13685. s2l:
  13686.  dc.w 0
  13687.  dc.w spr2pth
  13688. s2h:
  13689.  dc.w 0
  13690.  dc.w spr3ptl
  13691. s3l:
  13692.  dc.w 0
  13693.  dc.w spr3pth
  13694. s3h:
  13695.  dc.w 0
  13696.  dc.w spr4ptl
  13697. s4l:
  13698.  dc.w 0
  13699.  dc.w spr4pth
  13700. s4h:
  13701.  dc.w 0
  13702.  dc.w spr5ptl
  13703. s5l:
  13704.  dc.w 0
  13705.  dc.w spr5pth
  13706. s5h:
  13707.  dc.w 0
  13708.  dc.w spr6ptl
  13709. s6l:
  13710.  dc.w 0
  13711.  dc.w spr6pth
  13712. s6h:
  13713.  dc.w 0
  13714.  dc.w spr7ptl
  13715. s7l:
  13716.  dc.w 0
  13717.  dc.w spr7pth
  13718. s7h:
  13719.  dc.w 0
  13720.  
  13721. ; dc.w $106,$c42
  13722. ; incbin "borderpal"
  13723.  
  13724.  dc.w $106,$c42
  13725.  
  13726.  dc.w bplcon0,$0211
  13727.  dc.w bplcon1
  13728. smoff:
  13729.  dc.w $0
  13730.  
  13731.  dc.w $108
  13732. modulo: dc.w 0
  13733.  dc.w $10a,0
  13734.  
  13735.  dc.w $1001,$ff00
  13736.  dc.w intreq,$11
  13737.  
  13738. PALETTESPACE:
  13739.  dcb.l 528,$1fe0000
  13740.  
  13741.  dc.w $2001,$ff00
  13742.  
  13743.  dc.w bpl1pth
  13744. pl1h
  13745.  dc.w 0
  13746.  
  13747.  dc.w bpl1ptl
  13748. pl1l
  13749.  dc.w 0
  13750.  
  13751.  dc.w bpl2pth
  13752. pl2h
  13753.  dc.w 0
  13754.  
  13755.  dc.w bpl2ptl
  13756. pl2l
  13757.  dc.w 0
  13758.  
  13759.  dc.w bpl3pth
  13760. pl3h
  13761.  dc.w 0
  13762.  
  13763.  dc.w bpl3ptl
  13764. pl3l
  13765.  dc.w 0
  13766.  
  13767.  dc.w bpl4pth
  13768. pl4h
  13769.  dc.w 0
  13770.  
  13771.  dc.w bpl4ptl
  13772. pl4l
  13773.  dc.w 0
  13774.  
  13775.  dc.w bpl5pth
  13776. pl5h
  13777.  dc.w 0
  13778.  
  13779.  dc.w bpl5ptl
  13780. pl5l
  13781.  dc.w 0
  13782.  
  13783.  dc.w bpl6pth
  13784. pl6h
  13785.  dc.w 0
  13786.  
  13787.  dc.w bpl6ptl
  13788. pl6l
  13789.  dc.w 0
  13790.  
  13791.  dc.w bpl7pth
  13792. pl7h
  13793.  dc.w 0
  13794.  
  13795.  dc.w bpl7ptl
  13796. pl7l
  13797.  dc.w 0
  13798.  
  13799.  dc.w bpl8pth
  13800. pl8h
  13801.  dc.w 0
  13802.  
  13803.  dc.w bpl8ptl
  13804. pl8l
  13805.  dc.w 0
  13806.  
  13807.  
  13808. val SET $2c
  13809. SCRMODULOS:
  13810.  REPT 232
  13811.  dc.b val,1,$ff,$fe
  13812.  dc.w $108,0
  13813.  dc.w $10a,0
  13814.  dc.b val,$df,$ff,$fe
  13815. val SET (val+1)&$ff
  13816.  ENDR
  13817.  
  13818.  dc.w $108,0,$10a,0
  13819.  dc.w $2401,$ff00
  13820.  dc.w ddfstop,$c8
  13821.  dc.w bplcon0,$9201
  13822.  dc.w bpl1ptl
  13823. scroll:
  13824.  dc.w 0
  13825.  dc.w bpl1pth
  13826. scrolh:
  13827.  dc.w 0
  13828.  
  13829.  dc.w $106,$c40
  13830.  dc.w $180,0
  13831.  dc.w $182,$f0
  13832. ; dc.w $108,40
  13833. ; dc.w $10a,40
  13834.  
  13835. ; dc.w $80
  13836. ;JUMPBACKH:
  13837. ; dc.w 0
  13838. ; dc.w $82
  13839. ;JUMPBACKL:
  13840. ; dc.w 0
  13841.  
  13842. ; dc.w $8a,0
  13843.  
  13844.  dc.w $ffff,$fffe
  13845.  dc.w $ffff,$fffe
  13846.  
  13847. PALETTEBIT:
  13848.  incbin "256palette"
  13849.  dc.w $ffff,$fffe
  13850.  
  13851. yposcop:
  13852. ; dc.w $2a11,$fffe
  13853. ; dc.w $8a,0
  13854.  
  13855. ; ds.l 104*12
  13856.  
  13857. ;colbars:
  13858. ;val SET $2a
  13859. ; dcb.l 104*80,$1fe0000
  13860. ; dc.w $106,$c42
  13861. ; dc.w $80
  13862. ;pch1:
  13863. ; dc.w 0
  13864. ; dc.w $82
  13865. ;pcl1:
  13866. ; dc.w 0 
  13867. ; dc.w $88,0
  13868. ; dc.w $ffff,$fffe       ; End copper list.
  13869.  
  13870. ; ds.l 104*12
  13871.  
  13872.  
  13873. ;colbars2:
  13874. ;val SET $2a
  13875. ; dcb.l 104*80,$1fe0000
  13876. ; dc.w $106,$c42
  13877. ; dc.w $80
  13878. ;pch2:
  13879. ; dc.w 0
  13880. ; dc.w $82
  13881. ;pcl2:
  13882. ; dc.w 0
  13883. ; dc.w $88,0
  13884. ; dc.w $ffff,$fffe       ; End copper list.
  13885.  
  13886. ; ds.l 104*10
  13887.  
  13888. NullCopper:
  13889.  dc.w $ffff,$fffe
  13890.  
  13891. hitcol: dc.l 0
  13892.  
  13893. old: dc.l 0
  13894.  
  13895.  CNOP 0,64
  13896. SCROLLSCRN: ds.l 20*16
  13897.  
  13898. SCROLLOFFSET: dc.w 0
  13899. SCROLLTIMER: dc.w 100
  13900. SCROLLDIRECTION: dc.w 1
  13901. SCROLLXPOS: dc.w 0
  13902. SCROLLPOINTER: dc.l testscroll
  13903. ENDSCROLL: dc.l endtestscroll
  13904.  
  13905. testscroll:
  13906. ;      12345678901234567890123456789012345678901234567890123456789012345678901234567890
  13907. ; dc.b "The Quick Brown Fox Jumped Over The Lazy Dog!                                   "
  13908. ; dc.b "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ                            "
  13909. ; dc.b "The Quick Brown Fox Jumped Over The Lazy Dog!                                   "
  13910.  
  13911. BLANKSCROLL:
  13912.  dc.b "                                                                                "
  13913. endtestscroll: 
  13914.  
  13915. prot5: dc.w 0
  13916. PanelCop:
  13917.  
  13918.  dc.w $80
  13919. och:
  13920.  dc.w 0
  13921.  dc.w $82
  13922. ocl:
  13923.  dc.w 0
  13924.  
  13925. statskip:
  13926.  dc.w $1fe,0
  13927.  dc.w $1fe,0
  13928.  
  13929.  dc.w $10c,0
  13930.  dc.w bplcon0,$1201
  13931.  dc.w bpl1ptl
  13932. n1l:
  13933.  dc.w 0
  13934.  dc.w bpl1pth
  13935. n1h:
  13936.  dc.w 0
  13937.  dc.w $108,-24
  13938. ; incbin "Panelpal"
  13939.  
  13940.  dc.w bpl2pth
  13941. p2h
  13942.  dc.w 0
  13943.  
  13944.  dc.w bpl2ptl
  13945. p2l
  13946.  dc.w 0
  13947.  
  13948.  dc.w bpl3pth
  13949. p3h
  13950.  dc.w 0
  13951.  
  13952.  dc.w bpl3ptl
  13953. p3l
  13954.  dc.w 0
  13955.  
  13956.  dc.w bpl4pth
  13957. p4h
  13958.  dc.w 0
  13959.  dc.w bpl4ptl
  13960. p4l
  13961.  dc.w 0
  13962.  dc.w bpl5pth
  13963. p5h
  13964.  dc.w 0
  13965.  dc.w bpl5ptl
  13966. p5l
  13967.  dc.w 0
  13968.  dc.w bpl6pth
  13969. p6h
  13970.  dc.w 0
  13971.  dc.w bpl6ptl
  13972. p6l
  13973.  dc.w 0
  13974.  dc.w bpl7pth
  13975. p7h
  13976.  dc.w 0
  13977.  dc.w bpl7ptl
  13978. p7l
  13979.  dc.w 0
  13980.  dc.w bpl8pth
  13981. p8h
  13982.  dc.w 0
  13983.  dc.w bpl8ptl
  13984. p8l
  13985.  dc.w 0
  13986.  
  13987.  
  13988.  dc.w ddfstart,$38
  13989.  dc.w ddfstop,$b8
  13990.  dc.w diwstart,$2c81
  13991.  dc.w diwstop,$2cc1
  13992.  
  13993.  dc.w bplcon0
  13994. Panelcon: dc.w $0211
  13995.  dc.w bpl1pth
  13996. p1h
  13997.  dc.w 0
  13998.  
  13999.  dc.w bpl1ptl
  14000. p1l
  14001.  dc.w 0
  14002.  
  14003.  
  14004.  dc.w $108,40*7
  14005.  dc.w $10a,40*7
  14006.  
  14007.  dc.w $ffff,$fffe
  14008.  
  14009.  dc.w $180,$fff
  14010.  
  14011.  
  14012.  dc.w $f801,$ff00
  14013.  dc.w col1,$50
  14014.  dc.w $f901,$ff00
  14015.  dc.w col1,$90
  14016.  dc.w $fa01,$ff00
  14017.  dc.w col1,$f0
  14018.  dc.w $fb01,$ff00
  14019.  dc.w col1,$f0
  14020.  dc.w $fc01,$ff00
  14021.  dc.w col1,$90
  14022.  dc.w $fd01,$ff00
  14023.  dc.w col1,$50
  14024.  
  14025.  dc.w $fe01,$ff00
  14026.  dc.w col1,$fff
  14027.  
  14028.  dc.w $ffdf,$fffe
  14029.  dc.w $a01,$ff00
  14030.  dc.w bplcon0,$201
  14031.  
  14032. ; incbin "faces2cols"
  14033.  dc.w bpl1pth
  14034. f1h
  14035.  dc.w 0
  14036.  
  14037.  dc.w bpl1ptl
  14038. f1l
  14039.  dc.w 0
  14040.  
  14041.  dc.w bpl2pth
  14042. f2h
  14043.  dc.w 0
  14044.  
  14045.  dc.w bpl2ptl
  14046. f2l
  14047.  dc.w 0
  14048.  
  14049.  dc.w bpl3pth
  14050. f3h
  14051.  dc.w 0
  14052.  
  14053.  dc.w bpl3ptl
  14054. f3l
  14055.  dc.w 0
  14056.  
  14057.  dc.w bpl4pth
  14058. f4h
  14059.  dc.w 0
  14060.  dc.w bpl4ptl
  14061. f4l
  14062.  dc.w 0
  14063.  
  14064.  dc.w bpl5pth
  14065. f5h
  14066.  dc.w 0
  14067.  dc.w bpl5ptl
  14068. f5l
  14069.  dc.w 0
  14070.  
  14071.  dc.w $0c01,$ff00
  14072.  dc.w bplcon0,$5201
  14073.   
  14074.  dc.w $ffff,$fffe
  14075.  
  14076.  cnop 0,64
  14077. FacePlace:
  14078. ; ds.l 6*32*5
  14079.  
  14080. TEXTSCRN: dc.l 0
  14081.  
  14082. TEXTCOP:
  14083.  dc.w intreq,$8030
  14084.  
  14085.  dc.w spr0ptl
  14086. txs0l:
  14087.  dc.w 0
  14088.  dc.w spr0pth
  14089. txs0h:
  14090.  dc.w 0
  14091.  dc.w spr1ptl
  14092. txs1l:
  14093.  dc.w 0
  14094.  dc.w spr1pth
  14095. txs1h:
  14096.  dc.w 0
  14097.  dc.w spr2ptl
  14098. txs2l:
  14099.  dc.w 0
  14100.  dc.w spr2pth
  14101. txs2h:
  14102.  dc.w 0
  14103.  dc.w spr3ptl
  14104. txs3l:
  14105.  dc.w 0
  14106.  dc.w spr3pth
  14107. txs3h:
  14108.  dc.w 0
  14109.  dc.w spr4ptl
  14110. txs4l:
  14111.  dc.w 0
  14112.  dc.w spr4pth
  14113. txs4h:
  14114.  dc.w 0
  14115.  dc.w spr5ptl
  14116. txs5l:
  14117.  dc.w 0
  14118.  dc.w spr5pth
  14119. txs5h:
  14120.  dc.w 0
  14121.  dc.w spr6ptl
  14122. txs6l:
  14123.  dc.w 0
  14124.  dc.w spr6pth
  14125. txs6h:
  14126.  dc.w 0
  14127.  dc.w spr7ptl
  14128. txs7l:
  14129.  dc.w 0
  14130.  dc.w spr7pth
  14131. txs7h:
  14132.  dc.w 0
  14133.  
  14134.  
  14135.  dc.w $10c,$0088
  14136.  
  14137.  dc.w $1fc,$f
  14138.  dc.w diwstart,$2c81    ; Top left corner of screen.
  14139.  dc.w diwstop
  14140. BOTOFTXT:
  14141.  dc.w $2cc1     ; Bottom right corner of screen.
  14142.  dc.w ddfstart,$38      ; Data fetch start.
  14143.  dc.w ddfstop,$c8       ; Data fetch stop.
  14144.  
  14145.  dc.w bplcon0
  14146. TSCP:
  14147.  dc.w $a201
  14148.  
  14149.  dc.w $106,$c40
  14150.  
  14151.  dc.w $2a01,$ff00
  14152.  
  14153.  dc.w col0,0
  14154.  dc.w col1
  14155. TOPLET:
  14156. TXTCOLL:
  14157.  dc.w 0
  14158.   dc.w col2
  14159. BOTLET:
  14160. TOPCOLL:
  14161.  dc.w 0
  14162.  dc.w col3
  14163. ALLTEXT:
  14164. MIXCOLL:
  14165.  dc.w $fff
  14166.  dc.w $106,$e40
  14167.  dc.w col3
  14168. ALLTEXTLOW:
  14169.  dc.w $0
  14170.  
  14171.  
  14172.  dc.w bpl1pth
  14173. TSPTh:
  14174.  dc.w 0
  14175.  dc.w bpl1ptl
  14176. TSPTl:
  14177.  dc.w 0
  14178.  
  14179.  dc.w bpl2pth
  14180. TSPTh2:
  14181.  dc.w 0
  14182.  dc.w bpl2ptl
  14183. TSPTl2:
  14184.  dc.w 0
  14185.  
  14186.  
  14187.  dc.w $108,0
  14188.  dc.w $10a,0
  14189.  
  14190.  dc.w $ffff,$fffe
  14191.  
  14192. ********************************************
  14193. * Stuff you don't have to worry about yet. *
  14194. ********************************************
  14195.  
  14196. closeeverything:
  14197.  
  14198. ; jsr mt_end
  14199.  
  14200.  move.l #nullcop,d0
  14201. ; move.l old,d0
  14202.  
  14203.  
  14204. ;charlie  
  14205.  move.l d0,$dff080     ; Restore old copper list.
  14206.  move.w d0,ocl
  14207.  swap d0
  14208.  move.w d0,och
  14209.  
  14210. ; move.l doslib,a6
  14211. ; move.l #4,d1
  14212. ; jsr -198(a6)
  14213.  
  14214. ; move.l doslib,d0
  14215. ; move.l d0,a1
  14216. ; move.l 4.w,a6
  14217. ; jsr CloseLib(a6)
  14218.  
  14219.  move.l #$dff000,a6
  14220.  move.w #$8020,dmacon(a6)
  14221.  move.w #$f,dmacon(a6)
  14222.  
  14223. ; move.l 4.w,a6
  14224. ; lea VBLANKInt,a1
  14225. ; moveq #INTB_COPER,d0
  14226. ; jsr _LVORemIntServer(a6)
  14227.  
  14228. ; IFEQ CD32VER
  14229. ; move.l OLDKINT,$68.w
  14230. ; ENDC
  14231. ; move.w saveinters,d0
  14232. ; or.w #$c000,d0
  14233. ; move.w d0,intena(a6)
  14234.  clr.w $dff0a8
  14235.  clr.w $dff0b8
  14236.  clr.w $dff0c8
  14237.  clr.w $dff0d8
  14238.  
  14239.  
  14240. ; move.l oldview,a1
  14241. ; move.l a1,d0
  14242. ; move.l gfxbase,a6
  14243. ; jsr -$de(a6)
  14244.  
  14245. ; cmp.b #'s',mors
  14246. ; beq.s leaveold
  14247. ; move.w #$f8e,$dff1dc
  14248. ;leaveold:
  14249.  
  14250.  jsr RELEASELEVELMEM
  14251.  jsr RELEASESCRNMEM
  14252.  
  14253.  move.l #0,d0
  14254.  
  14255.  rts
  14256.  
  14257.  
  14258.  
  14259. intbase: dc.l 0
  14260. gfxbase: dc.l 0
  14261. oldview: dc.l 0
  14262. oldcopper: dc.l 0
  14263.  
  14264. stuff:
  14265.  
  14266.     Lea    gfxname(pc),a1    
  14267.     Moveq.l    #0,d0
  14268.     Move.l    $4.w,a6    
  14269.     Jsr    -$228(a6)
  14270.     add.w d1,RVAL1
  14271.     Move.l     d0,gfxbase
  14272.     Move.l    d0,a6                Use As Base Reg
  14273.     Move.l    34(a6),oldview
  14274.     move.l 38(a6),old
  14275.     move.l 38(a6),oldcopper
  14276.     rts
  14277.  
  14278. gfxname dc.b "graphics.library",0
  14279.  even
  14280. INTUNAME    dc.b    "intuition.library",0
  14281.  
  14282.  even
  14283.  
  14284.  
  14285.  cnop 0,64
  14286.  
  14287. Panel:
  14288.  dc.l 0
  14289.  
  14290. TimerScr: 
  14291. ;ds.b 40*64
  14292.  
  14293. scrntab:
  14294.  ds.b 16
  14295. val SET 32
  14296.  REPT 96
  14297.  dc.b val,val,val
  14298. val SET val+1
  14299.  ENDR
  14300.  ds.b 16
  14301.  
  14302. smallscrntab:
  14303. val SET 32
  14304.  REPT 96
  14305.  dc.b val,val
  14306. val SET val+1
  14307.  ENDR
  14308.  
  14309.  cnop 0,64
  14310. scrn:
  14311.  dc.l 0
  14312. ; incbin "ab3:includes/newborderRAW"
  14313. ; ds.b 80
  14314. scrn2:
  14315.  dc.l 0
  14316.  
  14317. ;flib:
  14318. ; incbin "ab3:includes/newborderRAW"
  14319. ; ds.b 80
  14320. ;flib2:
  14321. ; incbin "ab3:includes/newborderRAW"
  14322. ; ds.b 80
  14323.  
  14324. ; incbin "ab3:includes/newborderRAW"
  14325. ; ds.b 80
  14326.  
  14327. SCRNDRAWPT: dc.l 0
  14328. SCRNSHOWPT: dc.l 0
  14329.  
  14330. ; dcb.l 8,$33333333
  14331. ; dc.l 0
  14332. ; dc.l 0
  14333. ; dcb.l 8,$0f0f0f0f
  14334. ; dc.l 0
  14335. ; dc.l 0
  14336. ;
  14337. ; dcb.l 8,$00ff00ff
  14338. ; dc.l 0
  14339. ; dc.l 0
  14340. ; dcb.l 8,$0000ffff
  14341. ; dc.l 0
  14342. ; dc.l 0
  14343. ; dc.l 0,-1,0,-1,0,-1,0,-1
  14344. ; dc.l 0
  14345. ; dc.l 0
  14346. ; dc.l -1,-1,0,0,-1,-1,0,0
  14347. ; dc.l 0
  14348. ; dc.l 0
  14349. ; dc.l 0,0,-1,-1,-1,-1,-1,-1
  14350. ; dc.l 0
  14351. ; dc.l 0
  14352.  
  14353. NumTimes: dc.l 0
  14354. TimeCount: dc.l 0
  14355. oldtime: dc.l 0
  14356. counting: dc.b 0
  14357. oktodisplay: dc.b 0
  14358.  
  14359. INITTIMER:
  14360.  move.l #0,TimeCount
  14361.  move.l #0,NumTimes
  14362.  rts
  14363.  
  14364. STARTCOUNT:
  14365.  move.l d0,-(a7)
  14366.  move.l $dff004,d0
  14367.  and.l #$1ffff,d0
  14368.  move.l d0,oldtime
  14369.  st counting
  14370.  move.l (a7)+,d0
  14371.  rts
  14372.  
  14373. STOPCOUNT:
  14374.  move.l d0,-(a7)
  14375.  move.l $dff004,d0
  14376.  and.l #$1ffff,d0
  14377.  
  14378.  sub.l oldtime,d0
  14379.  cmp.l #-256,d0
  14380.  bge.s okcount
  14381.  add.l #313*256,d0
  14382. okcount:
  14383.  add.l d0,TimeCount
  14384.  addq.l #1,NumTimes
  14385.  clr.b counting
  14386.  move.l (a7)+,d0
  14387.  rts
  14388.  
  14389. STOPCOUNTNOADD:
  14390.  move.l d0,-(a7)
  14391.  move.l $dff004,d0
  14392.  and.l #$1ffff,d0
  14393.  
  14394.  sub.l oldtime,d0
  14395.  cmp.l #-256,d0
  14396.  bge.s okcount2
  14397.  add.l #313*256,d0
  14398. okcount2:
  14399.  add.l d0,TimeCount
  14400.  clr.b counting
  14401.  move.l (a7)+,d0
  14402.  rts
  14403.  
  14404. maxbot: dc.w 0
  14405. tstneg: dc.l 0
  14406.  
  14407. STOPTIMER:
  14408.  st oktodisplay
  14409.  rts
  14410.  
  14411. digits: incbin "numbers.inc"
  14412.  
  14413. COMPACTMAP: ds.l 257
  14414.  
  14415. BIGMAP: ds.l 256*10
  14416.  
  14417.  Section Sounds,CODE_C
  14418.  
  14419. nullcop:
  14420.  dc.w $106,$c40
  14421.  dc.w $180,0 
  14422.  dc.w $100,$0
  14423.  dc.w $ffff,$fffe
  14424.  
  14425. Scream:
  14426. ; incbin "ab3:sounds/Scream"
  14427. ; ds.w 100
  14428. EndScream:
  14429. LowScream:
  14430. ; incbin "ab3:sounds/LowScream"
  14431. ; ds.w 100
  14432. EndLowScream:
  14433. BaddieGun:
  14434. ; incbin "ab3:sounds/BaddieGun"
  14435. EndBaddieGun:
  14436. bass:
  14437. ; incbin "ab3:sounds/backbass+drum"
  14438. bassend:
  14439. Shoot:
  14440. ; incbin "ab3:sounds/fire!"
  14441. EndShoot:
  14442. Munch:
  14443. ; incbin "ab3:sounds/munch"
  14444. EndMunch:
  14445. PooGun:
  14446. ; incbin "ab3:sounds/shoot.dm"
  14447. EndPooGun:
  14448. Collect:
  14449. ; incbin "ab3:sounds/collect"
  14450. EndCollect:
  14451. DoorNoise:
  14452. ; incbin "ab3:sounds/newdoor"
  14453. EndDoorNoise:
  14454. Stomp:
  14455. ; incbin "ab3:sounds/footstep3"
  14456. EndStomp:
  14457. SwitchNoise:
  14458. ; incbin "ab3:sounds/switch"
  14459. EndSwitch:
  14460. Reload:
  14461. ; incbin "ab3:sounds/switch1.SFX"
  14462. EndReload:
  14463.  
  14464. CHEATFRAME:
  14465.  dc.b 26,20,33,27,17,12
  14466. ENDCHEAT:
  14467.  
  14468. NoAmmo:
  14469. ; incbin "ab3:sounds/noammo"
  14470. EndNoAmmo:
  14471. Splotch:
  14472. ; incbin "ab3:sounds/splotch"
  14473. EndSplotch:
  14474. SplatPop:
  14475. ; incbin "ab3:sounds/splatpop"
  14476. EndSplatPop:
  14477. Boom:
  14478. ; incbin "ab3:sounds/boom"
  14479. EndBoom:
  14480. Hiss:
  14481. ; incbin "ab3:sounds/newhiss"
  14482. EndHiss:
  14483. Howl1:
  14484. ; incbin "ab3:sounds/howl1"
  14485. EndHowl1:
  14486. Howl2:
  14487. ; incbin "ab3:sounds/howl2"
  14488. EndHowl2:
  14489. Pant:
  14490. ; incbin "ab3:sounds/pant"
  14491. EndPant:
  14492. Whoosh:
  14493. ; incbin "ab3:sounds/whoosh"
  14494. EndWhoosh:
  14495. ROAR:
  14496. ; incbin "ab3:sounds/bigscream"
  14497. EndROAR
  14498. whoosh:
  14499. ; incbin "ab3:sounds/flame"
  14500. Endwhoosh:
  14501.  SECTION music,code_c
  14502.  
  14503. UseAllChannels: dc.w 0
  14504.  
  14505. mt_init:
  14506.     move.l    mt_data,a0
  14507.     move.l    a0,a1
  14508.     add.l    #$3b8,a1
  14509.     moveq    #$7f,d0
  14510.     moveq    #0,d1
  14511. mt_loop:move.l    d1,d2
  14512.     subq.w    #1,d0
  14513. mt_lop2:move.b    (a1)+,d1
  14514.     cmp.b    d2,d1
  14515.     bgt.s    mt_loop
  14516.     dbf    d0,mt_lop2
  14517.     addq.b    #1,d2
  14518.  
  14519.     lea    mt_samplestarts(pc),a1
  14520.     asl.l    #8,d2
  14521.     asl.l    #2,d2
  14522.     add.l    #$43c,d2
  14523.     add.l    a0,d2
  14524.     move.l    d2,a2
  14525.     moveq    #$1e,d0
  14526. mt_lop3:
  14527.     clr.l    (a2)
  14528.     move.l    a2,(a1)+
  14529.     moveq    #0,d1
  14530.     move.w    42(a0),d1
  14531.     asl.l    #1,d1
  14532.     add.l    d1,a2
  14533.     add.l    #$1e,a0
  14534.     dbf    d0,mt_lop3
  14535.  
  14536.     or.b    #$2,$bfe001
  14537.     move.b    #$6,mt_speed
  14538.     clr.w    $dff0a8
  14539.     clr.w    $dff0b8
  14540.     clr.w    $dff0c8
  14541.     clr.w    $dff0d8
  14542.     clr.b    mt_songpos
  14543.     clr.b    mt_counter
  14544.     clr.w    mt_pattpos
  14545.     rts
  14546.  
  14547. mt_end:    clr.w    $dff0a8
  14548.     clr.w    $dff0b8
  14549.     clr.w    $dff0c8
  14550.     clr.w    $dff0d8
  14551.     move.w    #$f,$dff096
  14552.     rts
  14553.  
  14554. mt_music:
  14555.     movem.l    d0-d4/a0-a3/a5-a6,-(a7)
  14556.     move.l    mt_data,a0
  14557.     addq.b    #$1,mt_counter
  14558.     move.b    mt_counter,D0
  14559.     cmp.b    mt_speed,D0
  14560.     blt.s    mt_nonew
  14561.     clr.b    mt_counter
  14562.     bra    mt_getnew
  14563.  
  14564. mt_nonew:
  14565.     lea    mt_voice1(pc),a6
  14566.     lea    $dff0a0,a5
  14567.     bsr    mt_checkcom
  14568.     tst.b UseAllChannels
  14569.     beq mt_endr
  14570.     lea    mt_voice2(pc),a6
  14571.     lea    $dff0b0,a5
  14572.     bsr    mt_checkcom
  14573.      lea    mt_voice3(pc),a6
  14574.     lea    $dff0c0,a5
  14575.     bsr    mt_checkcom
  14576.     lea    mt_voice4(pc),a6
  14577.     lea    $dff0d0,a5
  14578.     bsr    mt_checkcom
  14579.     bra    mt_endr
  14580.  
  14581. mt_arpeggio:
  14582.     moveq    #0,d0
  14583.     move.b    mt_counter,d0
  14584.     divs    #$3,d0
  14585.     swap    d0
  14586.     cmp.w    #$0,d0
  14587.     beq.s    mt_arp2
  14588.     cmp.w    #$2,d0
  14589.     beq.s    mt_arp1
  14590.  
  14591.     moveq    #0,d0
  14592.     move.b    $3(a6),d0
  14593.     lsr.b    #4,d0
  14594.     bra.s    mt_arp3
  14595. mt_arp1:moveq    #0,d0
  14596.     move.b    $3(a6),d0
  14597.     and.b    #$f,d0
  14598.     bra.s    mt_arp3
  14599. mt_arp2:move.w    $10(a6),d2
  14600.     bra.s    mt_arp4
  14601. mt_arp3:asl.w    #1,d0
  14602.     moveq    #0,d1
  14603.     move.w    $10(a6),d1
  14604.     lea    mt_periods(pc),a0
  14605.     moveq    #$24,d7
  14606. mt_arploop:
  14607.     move.w    (a0,d0.w),d2
  14608.     cmp.w    (a0),d1
  14609.     bge.s    mt_arp4
  14610.     addq.l    #2,a0
  14611.     dbf    d7,mt_arploop
  14612.     rts
  14613. mt_arp4:move.w    d2,$6(a5)
  14614.     rts
  14615.  
  14616. mt_getnew:
  14617.     move.l    mt_data,a0
  14618.     move.l    a0,a3
  14619.     move.l    a0,a2
  14620.     add.l    #$c,a3
  14621.     add.l    #$3b8,a2
  14622.     add.l    #$43c,a0
  14623.  
  14624.     moveq    #0,d0
  14625.     move.l    d0,d1
  14626.     move.b    mt_songpos,d0
  14627.     move.b    (a2,d0.w),d1
  14628.     asl.l    #8,d1
  14629.     asl.l    #2,d1
  14630.     add.w    mt_pattpos,d1
  14631.     clr.w    mt_dmacon
  14632.  
  14633.     lea    $dff0a0,a5
  14634.     lea    mt_voice1(pc),a6
  14635.     bsr    mt_playvoice
  14636.     tst.b UseAllChannels
  14637.     beq mt_setdma
  14638.     lea    $dff0b0,a5
  14639.     lea    mt_voice2(pc),a6
  14640.     bsr    mt_playvoice
  14641.     lea    $dff0c0,a5
  14642.     lea    mt_voice3(pc),a6
  14643.     bsr    mt_playvoice
  14644.     lea    $dff0d0,a5
  14645.     lea    mt_voice4(pc),a6
  14646.     bsr    mt_playvoice
  14647.     bra    mt_setdma
  14648.  
  14649. PROTCALC:
  14650. ;    include "ab3:source_4000/protcalc.s"
  14651.     incbin "ab3:includes/protcalc.bin"
  14652. ENDPROTCALC:
  14653.  
  14654. mt_playvoice:
  14655.     move.l    (a0,d1.l),(a6)
  14656.     addq.l    #4,d1
  14657.     moveq    #0,d2
  14658.     move.b    $2(a6),d2
  14659.     and.b    #$f0,d2
  14660.     lsr.b    #4,d2
  14661.     move.b    (a6),d0
  14662.     and.b    #$f0,d0
  14663.     or.b    d0,d2
  14664.     tst.b    d2
  14665.     beq.s    mt_setregs
  14666.     moveq    #0,d3
  14667.     lea    mt_samplestarts(pc),a1
  14668.     move.l    d2,d4
  14669.     subq.l    #$1,d2
  14670.     asl.l    #2,d2
  14671.     mulu    #$1e,d4
  14672.     move.l    (a1,d2.l),$4(a6)
  14673.     move.w    (a3,d4.l),$8(a6)
  14674.     move.w    $2(a3,d4.l),$12(a6)
  14675.     move.w    $4(a3,d4.l),d3
  14676.     tst.w    d3
  14677.     beq.s    mt_noloop
  14678.     move.l    $4(a6),d2
  14679.     asl.w    #1,d3
  14680.     add.l    d3,d2
  14681.     move.l    d2,$a(a6)
  14682.     move.w    $4(a3,d4.l),d0
  14683.     add.w    $6(a3,d4.l),d0
  14684.     move.w    d0,8(a6)
  14685.     move.w    $6(a3,d4.l),$e(a6)
  14686.     move.w    $12(a6),d0
  14687.     move.w d0,$8(a5)
  14688.     bra.s    mt_setregs
  14689. mt_noloop:
  14690.     move.l    $4(a6),d2
  14691.     add.l    d3,d2
  14692.     move.l    d2,$a(a6)
  14693.     move.w    $6(a3,d4.l),$e(a6)
  14694.     move.w    $12(a6),d0
  14695.     move.w d0,$8(a5)
  14696. mt_setregs:
  14697.     move.w    (a6),d0
  14698.     and.w    #$fff,d0
  14699.     beq    mt_checkcom2
  14700.     move.b    $2(a6),d0
  14701.     and.b    #$F,d0
  14702.     cmp.b    #$3,d0
  14703.     bne.s    mt_setperiod
  14704.     bsr    mt_setmyport
  14705.     bra    mt_checkcom2
  14706. mt_setperiod:
  14707.     move.w    (a6),$10(a6)
  14708.     and.w    #$fff,$10(a6)
  14709.     move.w    $14(a6),d0
  14710.     move.w    d0,$dff096
  14711.     clr.b    $1b(a6)
  14712.  
  14713.     move.l    $4(a6),(a5)
  14714.     move.w    $8(a6),$4(a5)
  14715.     move.w    $10(a6),d0
  14716.     and.w    #$fff,d0
  14717.     move.w    d0,$6(a5)
  14718.     move.w    $14(a6),d0
  14719.     or.w    d0,mt_dmacon
  14720.     bra    mt_checkcom2
  14721.  
  14722. mt_setdma:
  14723.      move.w #250,d0
  14724. mt_wait:
  14725.      add.w #1,testchip
  14726.      dbra d0,mt_wait
  14727.     move.w    mt_dmacon,d0
  14728.     or.w    #$8000,d0
  14729.     tst.b UseAllChannels
  14730.     bne.s .splib
  14731.     and.w #%1111111111110001,d0
  14732. .splib
  14733.     move.w    d0,$dff096
  14734.     move.w #250,d0
  14735. mt_wait2:
  14736.     add.w #1,testchip
  14737.     dbra    d0,mt_wait2
  14738.     lea    $dff000,a5
  14739.     tst.b UseAllChannels
  14740.     beq.s noall
  14741.     lea    mt_voice4(pc),a6
  14742.     move.l    $a(a6),$d0(a5)
  14743.     move.w    $e(a6),$d4(a5)
  14744.     lea    mt_voice3(pc),a6
  14745.     move.l    $a(a6),$c0(a5)
  14746.     move.w    $e(a6),$c4(a5)
  14747.     lea    mt_voice2(pc),a6
  14748.     move.l    $a(a6),$b0(a5)
  14749.     move.w    $e(a6),$b4(a5)
  14750. noall:
  14751.     lea    mt_voice1(pc),a6
  14752.     move.l    $a(a6),$a0(a5)
  14753.     move.w    $e(a6),$a4(a5)
  14754.  
  14755.     add.w    #$10,mt_pattpos
  14756.     cmp.w    #$400,mt_pattpos
  14757.     bne.s    mt_endr
  14758. mt_nex:    clr.w    mt_pattpos
  14759.     clr.b    mt_break
  14760.     addq.b    #1,mt_songpos
  14761.     and.b    #$7f,mt_songpos
  14762.     move.b    mt_songpos,d1
  14763. ;    cmp.b    mt_data+$3b6,d1
  14764. ;    bne.s    mt_endr
  14765. ;    move.b    mt_data+$3b7,mt_songpos
  14766. mt_endr:tst.b    mt_break
  14767.     bne.s    mt_nex
  14768.     movem.l    (a7)+,d0-d4/a0-a3/a5-a6
  14769.     rts
  14770.  
  14771. mt_setmyport:
  14772.     move.w    (a6),d2
  14773.     and.w    #$fff,d2
  14774.     move.w    d2,$18(a6)
  14775.     move.w    $10(a6),d0
  14776.     clr.b    $16(a6)
  14777.     cmp.w    d0,d2
  14778.     beq.s    mt_clrport
  14779.     bge.s    mt_rt
  14780.     move.b    #$1,$16(a6)
  14781.     rts
  14782. mt_clrport:
  14783.     clr.w    $18(a6)
  14784. mt_rt:    rts
  14785.  
  14786. CODESTORE: dc.l 0
  14787.  
  14788. mt_myport:
  14789.     move.b    $3(a6),d0
  14790.     beq.s    mt_myslide
  14791.     move.b    d0,$17(a6)
  14792.     clr.b    $3(a6)
  14793. mt_myslide:
  14794.     tst.w    $18(a6)
  14795.     beq.s    mt_rt
  14796.     moveq    #0,d0
  14797.     move.b    $17(a6),d0
  14798.     tst.b    $16(a6)
  14799.     bne.s    mt_mysub
  14800.     add.w    d0,$10(a6)
  14801.     move.w    $18(a6),d0
  14802.     cmp.w    $10(a6),d0
  14803.     bgt.s    mt_myok
  14804.     move.w    $18(a6),$10(a6)
  14805.     clr.w    $18(a6)
  14806. mt_myok:move.w    $10(a6),$6(a5)
  14807.     rts
  14808. mt_mysub:
  14809.     sub.w    d0,$10(a6)
  14810.     move.w    $18(a6),d0
  14811.     cmp.w    $10(a6),d0
  14812.     blt.s    mt_myok
  14813.     move.w    $18(a6),$10(a6)
  14814.     clr.w    $18(a6)
  14815.     move.w    $10(a6),$6(a5)
  14816.     rts
  14817.  
  14818. mt_vib:    move.b    $3(a6),d0
  14819.     beq.s    mt_vi
  14820.     move.b    d0,$1a(a6)
  14821.  
  14822. mt_vi:    move.b    $1b(a6),d0
  14823.     lea    mt_sin(pc),a4
  14824.     lsr.w    #$2,d0
  14825.     and.w    #$1f,d0
  14826.     moveq    #0,d2
  14827.     move.b    (a4,d0.w),d2
  14828.     move.b    $1a(a6),d0
  14829.     and.w    #$f,d0
  14830.     mulu    d0,d2
  14831.     lsr.w    #$6,d2
  14832.     move.w    $10(a6),d0
  14833.     tst.b    $1b(a6)
  14834.     bmi.s    mt_vibmin
  14835.     add.w    d2,d0
  14836.     bra.s    mt_vib2
  14837. mt_vibmin:
  14838.     sub.w    d2,d0
  14839. mt_vib2:move.w    d0,$6(a5)
  14840.     move.b    $1a(a6),d0
  14841.     lsr.w    #$2,d0
  14842.     and.w    #$3c,d0
  14843.     add.b    d0,$1b(a6)
  14844.     rts
  14845.  
  14846. mt_nop:    move.w    $10(a6),$6(a5)
  14847.     rts
  14848.  
  14849.  
  14850. mt_checkcom:
  14851.     move.w    $2(a6),d0
  14852.     and.w    #$fff,d0
  14853.     beq.s    mt_nop
  14854.     move.b    $2(a6),d0
  14855.     and.b    #$f,d0
  14856.     tst.b    d0
  14857.     beq    mt_arpeggio
  14858.     cmp.b    #$1,d0
  14859.     beq.s    mt_portup
  14860.     cmp.b    #$2,d0
  14861.     beq    mt_portdown
  14862.     cmp.b    #$3,d0
  14863.     beq    mt_myport
  14864.     cmp.b    #$4,d0
  14865.     beq    mt_vib
  14866.     move.w    $10(a6),$6(a5)
  14867.     cmp.b    #$a,d0
  14868.     beq.s    mt_volslide
  14869.     rts
  14870.  
  14871. mt_volslide:
  14872.     moveq    #0,d0
  14873.     move.b    $3(a6),d0
  14874.     lsr.b    #4,d0
  14875.     tst.b    d0
  14876.     beq.s    mt_voldown
  14877.     add.w    d0,$12(a6)
  14878.     cmp.w    #$40,$12(a6)
  14879.     bmi.s    mt_vol2
  14880.     move.w    #$40,$12(a6)
  14881. mt_vol2:move.w    $12(a6),d0
  14882.     move.w d0,$8(a5)
  14883.     rts
  14884.  
  14885. mt_voldown:
  14886.     moveq    #0,d0
  14887.     move.b    $3(a6),d0
  14888.     and.b    #$f,d0
  14889.     sub.w    d0,$12(a6)
  14890.     bpl.s    mt_vol3
  14891.     clr.w    $12(a6)
  14892. mt_vol3:move.w    $12(a6),d0
  14893.     move.w d0,$8(a5)
  14894.     rts
  14895.  
  14896. mt_portup:
  14897.     moveq    #0,d0
  14898.     move.b    $3(a6),d0
  14899.     sub.w    d0,$10(a6)
  14900.     move.w    $10(a6),d0
  14901.     and.w    #$fff,d0
  14902.     cmp.w    #$71,d0
  14903.     bpl.s    mt_por2
  14904.     and.w    #$f000,$10(a6)
  14905.     or.w    #$71,$10(a6)
  14906. mt_por2:move.w    $10(a6),d0
  14907.     and.w    #$fff,d0
  14908.     move.w    d0,$6(a5)
  14909.     rts
  14910.  
  14911. mt_portdown:
  14912.     clr.w    d0
  14913.     move.b    $3(a6),d0
  14914.     add.w    d0,$10(a6)
  14915.     move.w    $10(a6),d0
  14916.     and.w    #$fff,d0
  14917.     cmp.w    #$358,d0
  14918.     bmi.s    mt_por3
  14919.     and.w    #$f000,$10(a6)
  14920.     or.w    #$358,$10(a6)
  14921. mt_por3:move.w    $10(a6),d0
  14922.     and.w    #$fff,d0
  14923.     move.w    d0,$6(a5)
  14924.     rts
  14925.  
  14926. mt_checkcom2:
  14927.     move.b    $2(a6),d0
  14928.     and.b    #$f,d0
  14929.     cmp.b    #$e,d0
  14930.     beq.s    mt_setfilt
  14931.     cmp.b    #$d,d0
  14932.     beq.s    mt_pattbreak
  14933.     cmp.b    #$b,d0
  14934.     beq.s    mt_posjmp
  14935.     cmp.b    #$c,d0
  14936.     beq.s    mt_setvol
  14937.     cmp.b    #$f,d0
  14938.     beq.s    mt_setspeed
  14939.     rts
  14940.  
  14941. mt_setfilt:
  14942.     move.b    $3(a6),d0
  14943.     and.b    #$1,d0
  14944.     asl.b    #$1,d0
  14945.     and.b    #$fd,$bfe001
  14946.     or.b    d0,$bfe001
  14947.     rts
  14948. mt_pattbreak:
  14949.     not.b    mt_break
  14950.     rts
  14951. mt_posjmp:
  14952.     st reachedend
  14953.     move.b    $3(a6),d0
  14954.     subq.b    #$1,d0
  14955.     move.b    d0,mt_songpos
  14956.     not.b    mt_break
  14957.     rts
  14958. mt_setvol:
  14959.     cmp.b    #$40,$3(a6)
  14960.     ble.s    mt_vol4
  14961.     move.b    #$40,$3(a6)
  14962. mt_vol4:move.b    $3(a6),d0
  14963.     move.w d0,$8(a5)
  14964.     rts
  14965. mt_setspeed:
  14966.     cmp.b    #$1f,$3(a6)
  14967.     ble.s    mt_sets
  14968.     move.b    #$1f,$3(a6)
  14969. mt_sets:move.b    $3(a6),d0
  14970.     beq.s    mt_rts2
  14971.     move.b    d0,mt_speed
  14972.     clr.b    mt_counter
  14973. mt_rts2:rts
  14974.  
  14975. mt_sin:
  14976.  DC.b $00,$18,$31,$4a,$61,$78,$8d,$a1,$b4,$c5,$d4,$e0,$eb,$f4,$fa,$fd
  14977.  DC.b $ff,$fd,$fa,$f4,$eb,$e0,$d4,$c5,$b4,$a1,$8d,$78,$61,$4a,$31,$18
  14978.  
  14979. mt_periods:
  14980.  DC.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c,$023a,$021a,$01fc,$01e0
  14981.  DC.w $01c5,$01ac,$0194,$017d,$0168,$0153,$0140,$012e,$011d,$010d,$00fe
  14982.  DC.w $00f0,$00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097,$008f,$0087
  14983.  DC.w $007f,$0078,$0071,$0000,$0000
  14984.  
  14985. reachedend: dc.b 0
  14986. mt_speed:    DC.b    6
  14987. mt_songpos:    DC.b    0
  14988. mt_pattpos:    DC.w    0
  14989. mt_counter:    DC.b    0
  14990.  
  14991. mt_break:    DC.b    0
  14992. mt_dmacon:    DC.w    0
  14993. mt_samplestarts:DS.L    $1f
  14994. mt_voice1:    DS.w    10
  14995.         DC.w    1
  14996.         DS.w    3
  14997. mt_voice2:    DS.w    10
  14998.         DC.w    2
  14999.         DS.w    3
  15000. mt_voice3:    DS.w    10
  15001.         DC.w    4
  15002.         DS.w    3
  15003. mt_voice4:    DS.w    10
  15004.         DC.w    8
  15005.         DS.w    3
  15006.  
  15007. PLR1_dead: dc.w 0
  15008. PLR2_dead: dc.w 0
  15009.  
  15010. CHEATPTR: dc.l 0
  15011. CHEATNUM: dc.l 0
  15012.  
  15013. testchip: dc.w 0
  15014.  
  15015. LEVELMUSIC: dc.l 0
  15016.  
  15017. ;/* End of File */
  15018. mt_data: dc.l 0
  15019. tstchip: dc.l 0
  15020.  include "SERIAL_NIGHTMARE"
  15021.  
  15022. ingame:
  15023. ; incbin "work:temp/newmusic/testonechan"
  15024. gameover: 
  15025. ;incbin "ab3:includes/gameover"
  15026. welldone: incbin "ab3:includes/quietwelldone"
  15027.  
  15028.  
  15029.